Mailinglisten-Archive |
Martin Ramsch wrote: > > Nur so als Gedankenspielerei ein anderer Ansatz, bei dem (ohne > Kreuzprodukt) über IDs gruppiert wird. Um herauszufinden, ob > innerhalb eine Gruppe die gesuchten zwei IDv-Werte vorhanden sind, > kann man diese beiden auf 1 abbilden, alle anderen auf 0 - und wenn > die Summe über die Gruppe 2 ergibt, dann waren beide Werte dabei: Wenn man auch mehr als zwei verschiedene IDv's sucht scheint mir das etwas einfacher implementieren zu lassen. > SELECT > IDs > FROM > s_link_v > GROUP BY > IDs > HAVING > SUM( SIGN(FIELD(IDv,1,29)) ) = 2 > ; > > Kurzerklärung: > - FIELD liefert 0, falls nicht in der Liste, > sonst die Position des Suchelemets in der Liste > - SIGN bildet positive Zahlen auf 1 ab, die Null bleibt 0. > > Für eine Bedingung "genau 3 aus 4" wäre es z.B. FIELD(IDv,w,x,y,z) > ... = 3, oder "mindestens 2 aus 4": FIELD(IDv,w,x,y,z) ... >= 2. Soweit glaube ich es verstanden zu haben, leider klappt die Suche nicht immer. Zum Verst"andnis: IDs verweist auf eine Tabelle mit Subjects (Personen), IDv auf eine Tabelle mit Experimenten. Also kann jede Person mehrere Experimente gemacht haben, jedes Experiment kann von mehreren Personen gemacht werden. Auch kann eine Person ein Exp. mehrfach machen. Suche ich jetzt: mysql> SELECT IDs FROM s_link_v GROUP BY IDs HAVING SUM( SIGN(FIELD(IDv,3,5,35)) ) = 3; +------+ | IDs | +------+ | 161 | Das stimmt aber leider nicht, denn: mysql> SELECT IDs,IDv FROM s_link_v WHERE IDs=161; +------+------+ | IDs | IDv | +------+------+ | 161 | 3 | | 161 | 5 | | 161 | 11 | | 161 | 14 | | 161 | 21 | | 161 | 22 | | 161 | 23 | | 161 | 26 | | 161 | 27 | | 161 | 28 | | 161 | 5 | | 161 | 6 | +------+------+ Also hat Person 161 den Versuch 35 nicht gemacht :-( Wo ist der Fehler? Ich bin ratlos! Danke -- +---------------------------------------------------------+ |Michael Renner | | |MPI fuer biologische Kybernetik |Phone: +49-7071-601-638| |Spemannstr.38, D-72076 Tuebingen |FAX: +49-7071-601-616| |michael.renner_(at)_tuebingen.mpg.de | | +---------------------------------------------------ESC:wq+ --- *** Abmelden von dieser Mailingliste funktioniert per E-Mail *** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe
php::bar PHP Wiki - Listenarchive