MySQL 5: Bedingte Tabelle
Twilo
- datenbank
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
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
Hallo,
SELECT s.*, u.Id, u.Login, u.Type
FROMsessions
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)
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";