Mailinglisten-Archive |
Norbert Pfeiffer schrieb: > Hallo, > > in einer Tabelle stehen Objekte mit eindeutigen IDs. > CREATE TABLE objects { > oID int(11) NOT NULL auto_increment, > name varchar(11) NOT NULL default '', > PRIMARY KEY (oID) > } > > In einer zweiten Tabelle stehen dazu Eigenschaften. > CREATE TABLE propertys { > oID int(11) NOT NULL default 0, > props varchar(11) NOT NULL default '' > } > > Sucht man jetzt nach einer Eigenschaft, erhaelt man u.U. die oID > von mehreren Objekten, was soweit auch okay ist. > > Derzeit packe ich diese oID's in ein Array und lasse zu jedem Objekt > alle Eigenschaften ausgeben. Das klappt, ist jedoch etwas langsam, > weil man zwei Querys absetzen muss. > > SELECT o.oID > FROM objects AS o > LEFT JOIN propertys AS p > ON o.oID = p.oID > WHERE props IN ('gelb', 'rot'); > > SELECT o.oID, o.name, p.props > FROM objects AS o > LEFT JOIN propertys AS p > ON o.oID = p.oID > WHERE o,oID IN (12, 23, 174, 233); Sind die oIDs in der 2. Abfrage das Ergebnis aus der 1. Abfrage? > Deshalb die Frage, wie kann man aus diesen zwei Querys eines machen? Ein einfaches Zusammenfassen der 2 Abfragen erreichst du mit einer Subquery: http://dev.mysql.com/doc/refman/5.1/de/subqueries.html Was ist eigentlich das Ziel deiner Abfrage? Ich versuche das mal zu interpretieren: Du suchtst erst nach Objekten mit bestimmten Eigenschaften und willst dann diese Objekte mit allen Eigenschaften ausgeben. > Und ideal waere es, wenn man die Eigebnschaften eines Objektes in > eine Zeile bekommen wuerde, d.h. in obigen Beispiel bleiben ganze > vier Zeilen uebrig, gegenueber den drei Dutzend jetzt. Was wäre daran ideal? Wie willst du die Daten damit einfacher verarbeiten? Das wird schwer gehen, wenn überhaupt möglich. Die Abfrage wäre dann um ein vielfaches komplexer. Aber du kannst mit 'ORDER BY oID' das ganze entsprechend sortieren lassen und dann per PHP ausgeben lassen. Ich würde das eher mit 'WHERE oID = $id' innerhalb einer Schleife in PHP abarbeiten. Schließlich willst du das ja in der Ausgabe noch in eine Form bringen. Die Anzahl der SQL-Abfragen sollte hier nicht das Performance-Problem sein. Alternativ kannst die das Ergebnis der komplexen Abfrage mit Subquery in ein mehrdimensionales Array werfen und dieses dann in PHP weiterverarbeiten. Welcher Weg hier effektiver ist bleibt dem persönlichen Geschmack bzw. Programmierstil vorbehalten. Gruß Rico _______________________________________________ Allgemeine Infos zur Liste: http://www.4t2.com/mysql/ Verwaltung: https://lists.4t2.com/cgi-bin/mailman/listinfo/mysql-de
php::bar PHP Wiki - Listenarchive