Mailinglisten-Archive |
Hallo Christiane, >... einen einfachen SELECT ueber mehrere Tables mit gleicher Struktur >... der alle Zeilen aller Tabellen einfach untereinander ausgibt. Dein Problem gliedert sich in zwei Teile. 1.) Um die Ergebnissmengen von einzelnen Select's zu einer einzigen zu kombinieren, bietet die Sprache SQL (meines Wissens in SQL-92 be"- schrieben) ein bi"schen Mengenlehre. Dies sind f"ur ">Vereinigungen"< das Kommando UNION (ALL) ">Schnittmengen"< das Kommando INTERSECT ">Subtraktionen"< das Kommando MINUS Dein Problem w"are somit mittels SELECT frucht FROM t1 UNION SELECT frucht FROM t2 UNION SELECT frucht FROM t3 zu erledigen. Zu allen ">Mengen"<-Operationen ist zu sagen, da"s sie nur gehen, wenn die aufgef"uhrten Felder der zu mischenden Mengen in Anzahl und Typ "ubereinstimmen, sowie, da"s nur hinter dem letzten Select eine ORDER BY Clause stehen darf. Weiterhin gilt beim UNION, be"- reits, im Gegensatz zum normalen Select, ein implizites DISTINCT. M"ochte man mehrfach auftretende S"atze haben, so ist UNION ALL einzusetzen. 2.) Ein weiteres Problem, kann die verwendete Datenbank sein. Ein Hersteller ist nicht gezwungen, alle Features von SQL zu imple"- mentieren (dies trifft auch die ganz Gro"sen). In einer anderen Mail war bereits davon die Rede, da"s MySQL es z.B. nicht k"onnen soll. Dar"uber habe ich keine Information, aber es w"are m"oglich, denn in MySQL gehen ja auch keine SubSelects (bis auf EXISTS). Ist MySQL ">politisch"< festgelegt und die obige Nichtverf"ugbar"- keitsaussage zutreffend, w"urde ich, um trotzdem eine L"osung vorzu"- schlagen (nun leider etwas Aufwendig) folgende "Anderungen machen. 1.) Beseitigung der verschiedenen Tabellen bis auf eine. 2.) In diese ein zus"atzliches Feld aufnehmen; Name z.B. 'ACL' (f"ur Access Control List) oder 'User' (f"ur eine UserID) oder 'Unix' (f"ur eine Unix " ahnliche Sicherheit, k"onnte mit der RegExp Features in MySQL abgefragt werden) 3.) Ausdenken eines neuen Rechtesystems und 4.) Abfragen dann mit einem einfachen SELECT frucht FROM fruechte WHERE ... AND acl IN [ 'Readable', ... ] ... oder ... AND user = 'Hugo' ... Ich hoffe ich konnte Dir helfen Ciao, Christian Kayssner | e-mail: christian_(at)_kayssner.de Els"asser Platz 9 | Tel.: +49/611/48117 D-65195 Wiesbaden | Fax.: +49/611/9450244
php::bar PHP Wiki - Listenarchive