phpbar.de logo

Mailinglisten-Archive

geht das auch ohne PHP

geht das auch ohne PHP

Rico Koerner rico at netbreaker.de
Sam Apr 7 13:37:43 CEST 2007


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