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