Twilo: MySQL 5: Bedingte Tabelle

Hallo,

gegeben sind 4 Tabellen
session, users, resellers und pop3

in der Tabelle session gibt es eine Spalte user, welche die ID entweder von der Tabelle users, resellers oder pop3 enthält.

aktuel sieht mein SQL-Statement wie folgt aus:

SELECT  
  CASE  
    WHEN s.`type` = 'user'  
      THEN u.`login`  
    WHEN s.`type` = 'reseller'  
      THEN r.`login`  
    WHEN s.`type` = 'pop3'  
      THEN p.`login`  
    ELSE ''  
  END login  
FROM `sessions` s, `users` u, `resellers` r, `pop3` p  
WHERE `session` = ?  
  AND `ip` = ?  
  AND (  
    (  
      s.`type` = 'user'  
      AND s.`user` = u.`ID`  
    )  
    OR (  
      s.`type` = 'reseller'  
      AND s.`user` = r.`ID`  
    )  
    OR (  
      s.`type` = 'pop3'  
      AND s.`user` = p.`ID`  
    )  
  )  
GROUP BY login;

kann man das irgendwie intelligenter mit INNER JOINs lösen?
also if s.type = 'xxx' dann INNER JOIN xyz

ps. das Tabellenlayout kommt nicht von mir

Server Version: 5.0.45
MySQL-Client-Version: 5.0.51

mfg
Twilo

  1. Hi,

    du könntest die 3 Tabellen (users, resellers oder pop3) mit UNION ALL zusammenführen und dann darauf einen JOIN machen, also etwa so:

      
    SELECT s.*, u.Id, u.Login, u.Type  
    FROM `sessions` AS s  
    INNER JOIN  
      (SELECT ID, Login, 'reseller' AS Type FROM reseller  
       UNION ALL  
       SELECT ID, Login, 'pop3' FROM pop3  
       UNION ALL  
       SELECT ID, Login, 'users' FROM users) AS u  
       ON s.user = u.Id  
    WHERE s.IP = '0815.4711'  
    
    

    Sollte von dieser MySQL sogar unterstützt werden ;)

    Ciao, Frank

    1. Hallo,

      SELECT s.*, u.Id, u.Login, u.Type
      FROM sessions AS s
      INNER JOIN
        (SELECT ID, Login, 'reseller' AS Type FROM reseller
         UNION ALL
         SELECT ID, Login, 'pop3' FROM pop3
         UNION ALL
         SELECT ID, Login, 'users' FROM users) AS u
         ON s.user = u.Id
      WHERE s.IP = '0815.4711'

      
      >   
      > Sollte von dieser MySQL sogar unterstützt werden ;)  
        
      ist das ganze auch unter MySQL 4.0 bzw. MySQL 4.1 lauffähig?  
        
      MySQL 4.0 und MySQL 4.1 habe ich aktuell nicht zur Verfügung  
        
        
      mfg  
      Twilo  
      
      -- 
      [Farbtabelle](http://www.farb-tabelle.de)
      
      1. echo $begrüßung;

        ist das ganze auch unter MySQL 4.0 bzw. MySQL 4.1 lauffähig?

        Subquerys gibt es erst ab MySQL 4.1

        echo "$verabschiedung $name";