Christian Kruse: diffiziles SELECT

Beitrag lesen

Hallo srob,

Bis hierher hört sich das nach einer normalen 1:n-Beziehung an

Richtig.

  • warum nicht die beste Datenstruktur?

Weil sie umstaendlich und unhandlich ist.

Was sind "sehr generische" Daten?

Nun, Daten, deren Aufbau nicht 100% bekannt ist. In diese Datenstruktur koennte man EMails
stecken, User-Daten, Adress-Daten, etc, etc.

Nun habe ich das Problem, dass ich alle 'attributes'-Eintraege zu einem
'documents'-Eintrag haben moechte, bei dem ein 'attributes'-Eintrag einen bestimmten
Wert hat. Konkreter: es sind unter anderem User-Daten in dieser Struktur gespeichert.
Ich moechte jetzt einen bestimmten User heraussuchen, mit allen Attributen.

Ist das so richtig verstanden:

documents            attributes
---------            ----------
id         ---->>    id
type                 name
                      data

Richtig.

Du willst zu einer doc.id _alle_ n zugehörigen att-Sätze, und zwar jene doc.id, die auf
der n-Seite ein Feld mit einem bestimmten Inhalt aufweist?

Richtig.

Hört sich nach Subselect an;

Bei PG haette ich das auch so geloest ;)

da das in Deiner MySQL-Version ausscheidet, sehe ich als einzige Alternative zu Deinem
Ansatz einen zweistufigen SELECT.

*seufz* Ich hatte es befuerchtet.

Da MySQL auch für SELECTs in Tabellen zu impotent ist,

*Das* stimmt nicht. 'INSERT INTO statemet SELECT statement' ist durchaus moeglich.

könntest Du mit einem SELECT INTO OUTFILE aus attributes die Sätze heraussuchen, welche
Deinem Kriterium entsprechen, dann mit LOAD DATA das Ergebnis in eine Tabelle laden und
in einem zweiten SELECT das Endergebnis aufbauen.

Uarghs. Gehts noch ekeliger? Da waere ein INSERT INTO ... SELECT aber wesentlich sinnvoller.

Sehr holprig - aber wenn auf der n-Seite nur wenige Sätze Deinem Kriterium entsprechen,
könnte es bei sehr großen Tabellen performanter und ressourcenschonender sein als Dein
(beinahe) doppeltes Kreuzprodukt.

Hm. Mal sehen, ich werde es mal benchmarken. Besten Dank.

Gruesse,
 CK