phpbar.de logo

Mailinglisten-Archive

[php] Daten 'de-normalisieren'

[php] Daten 'de-normalisieren'

Sebastian Mendel lists at sebastianmendel.de
Mon Mai 24 11:19:15 CEST 2004


Andreas Ahlenstorf schrieb:

> Ich habe eine Reihe von Datensätzen, denen man Eigenschaften
> zuweisen kann, teilweise auch mehrere Eigenschaften aus derselben
> Tabelle. Das führt dazu, dass wenn ich keine Aggregatsfunktion
> (GROUP BY $datensatz_id oder SELECT DISTINCT) benutze, für jede
> Resultatskombination einen Datensatz bekomme. Nun ist es so, dass
> ich für eine Übersicht alle Informationen zu einem Datensatz
> brauche, was ich bisher meistens elegant umschiffen konnte. Meine
> Ansätze, um das zu lösen:
> 
> a) Für jeden Datensatz die anderen Tabellen mit eigener Query
>    befragen
> b) Alle Datensätze mit PHP "zusammenschreiben"
> 
> Variante a) drückt mir die Performance in den Keller. Für 11
> Datensätze 34 Queries ist Mist. Variante b) ist einigermassen
> verträglich, ich kann aber LIMIT nicht in Verbindung mit der
> Anzahl effektiven Datensätzen in Verbindung bringen, wobei mir,
> je mehr Datensätze verfügbar sind, die ganze Applikation auch
> in die Knie geht und der Speicher voll wird.
> 
> Summa summarum: Hat jemand eine gute Idee, wie ich das lösen
> kann, ohne viel Geschwindigkeit zu verlieren? Caching ist keine
> Lösung :) MySQL-only-Lösungen werden akzeptiert, wobei ich gerne
> etwas hätte, das auch mit anderen RDBMS funktioniert.

mit zwei Abfragen !?

1. alle PK's holen mit deinem LIMIT

2. alle Datensaätze zu den vorher gefunden PK's holen


wie Norbert schrieb:
Du hast:
ID  Bezeichnung  Farbe
  1, Tennisball,  rot
  1, Tennisball,  blau
  2, Racket,      lila
  2, Racket,      gelb

moechtest aber:
ID  Bezeichnung  Farbe
  1, Tennisball,  rot, blau
  2, Racket,      lila, gelb


SELECT `ID` FROM `Table` WHERE ... LIMIT 2

SELECT ...
WHERE `ID` IN ( [vorher gefundene PK's] )


lässt sich auch als Subquery umsetzen:

SELECT ...
WHERE `ID` IN ( SELECT `ID` FROM `Table` WHERE ... LIMIT 2 )


in ganz aktuellen Version wäre da auch noch group_concat() ...

-- 
Sebastian Mendel (www.sebastianmendel.de)

*www.warzonez.de* | www.tekkno4u.de | www.nofetish.com

php::bar PHP Wiki   -   Listenarchive