Etwas komplexere mySQL Abfrage

nummaEyns

Grünschnabel
Hallo liebe Community
nachdem ich nach längeren Googlen nichts gefunden habe, versuche ich es hier. Ich hoffe ihr könnt mir weiterhelfen.

Problem: Ich habe mehrere MySQL-Tabellen, die alle die selben Spaltennamen haben (z.B. id, name, angemeldet_seit, passwort).
Nun will ich alle Datenbanken einer Abfrage unterziehen ala:
"SELECT id, name FROM dbname1, dbname2 order by `angemeldet_seit` asc LIMIT 0, 150"

ich hoffe ihr könnt mir weiterhelfen.
Gruß: nummaEyns
 
Das ist nicht wirklich komplex, sondern das sind Basics :). Verwende doch einfach Aliases für die Tabellen und Felder und fertig ist die Laube.

cu Robert
 
CREATE TABLE `members_t1` (
`id` int(245) NOT NULL auto_increment,
`name` varchar(50) NOT NULL default '',
`email` varchar(245) NOT NULL default '',
`pw` varchar(245) NOT NULL default '',
`mtime` int(245) NOT NULL default '0',
`homepage` varchar(245) NOT NULL default '',
`icq` int(20) NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM PACK_KEYS=0 AUTO_INCREMENT=134 ;
und die weiteren tabellen eben t2, t3 usw aber sonst gleich (außer andere Einträge)

und @Robert: für mich ist das schon ziemlich vortgeschritten und komplex... ich habe es mal so versucht:
SELECT id, xp FROM members_t1 a, members_t2 b order by `mtime` asc
aber da ist irgendwas falsch, das seh sogar ich... aber ich weis leider nicht, wies richtig geht :(
 
Zwischen Deinen Tabellen in "FROM" fehlt zwischen Tabelle und Alias einfach nur "AS" ;)
 
Hallo,

du willst die Tabellen wahrscheinlich nicht joinen (so wie du es machen würdest und wahrscheinlich sehr viele Datensätze erhalten, da es sich um das (kartesische Produkt handelt), sondern die Ergebnisse mehr oder weniger mergen. Dafür gibts UNION und UNION ALL.
Eine Fehlermeldung hast du in deinem letzten Post bekommen, weil die Spalte "mtime" in mehreren Tabellen vorkam (du sagtest ja t2,t3 usw.) und damit nicht eindeutig ist. Eindeutig wird es, indem du den Tabellenname voranstellst, also z.B. "t1.mtime". Allerdings bleibt die Abfrage trotzdem ein Join.

So könnte es mit UNION ALL aussehen:

SQL:
(SELECT t1.id, t1.name, t1.email....
   FROM t1)
UNION ALL
(SELECT t2.id, t2.name, t2.email...
   FROM t2)
UNION ALL
(SELECT t3.id, t3.name, t3.email...
   FROM t3)
ORDER BY id
usw.

Hoffe es hilft,

Markus
 
Hm,mag sein ... wie weit ist das ganze dann abwärtskompatibel bzw entspricht das noch dem allg. SQL-Standard ? *g*
 
Hallo,

UNION bzw UNION ALL gehören zum SQL-Standard und zwar zu den Mengenoperationen wie auch MINUS, INTERSECT usw. In MySQL wird es ab Version 4.0 unterstützt.

Markus
 
Danke für die Info ... habe mir schon gedacht, dass das auf alten MySQL's nicht läuft. War bis letztes Jahr bei Greatnet.de (Hoster mit PHP & MySQL im Low-Budget-Bereich) und die hatten echt Uralt-Server-Software. Musste mein damaliges Projekt deshalb downgraden von 4.1 auf 3.25 ... es war Horror *g*
 

Neue Beiträge

Zurück