Mailinglisten-Archive |
Hallo Michael, Michael Borchers wrote: > tabelle 1 contacts mit contacts_id etc. > > tabelle 2 cat, die mehrere categorien und werte zu jeder category enthält. > mehrere davon können auf eine contacts_id zutreffen: > > contacts_id = 1, cat_id =14, cat_val =144 > contacts_id = 1, cat_id =18, cat_val=188 > contacts_id = 2, cat_id =11, cal_val=119 > contacts_id = 2, cat_id =14, cat_val=143 > > etc. > > die cats werden via get übergeben und via php bastel ich die klausel > zusammen. > > vorerst hatte ich ungefähr folgendes modell: > > SELECT contacts.*, cat.cat_id, cat.cat_val > FROM contacts, cat > WHERE > (cat.cat_id=14 AND cat.cat_value=144) > AND > (cat.cat_id=18 AND cat.cat_value=188) > etc... > > ziel ist es also alle kontakte zu finden, die genau diese kategorien > hinterlegt haben. > > so klappts mit der klausel leider nicht. ich vermute das where kann trotz > klammern immer nur eine bedingung für die tabelle erfüllen:( > > da muss wohl ein gefuchster JOIN her, kann mir jmd helfen? Etwas verwirrend ... SELECT `contacts`.*, `cat`.`id`, `cat`.`val` FROM `contacts` INNER JOIN `cat` ON `contacts`.`cat_id` = `cat`.`id` WHERE (`cat`.`id` = 14 AND `cat`.`val` = 144) OR (`cat`.`id` = 18 AND `cat`.`val` = 188) Mir ist die Relation zwischen contacts und cat nicht ganz schlüssig. Aus dem beispiel ist zumindest herauszulesen, das jede cat zu mehreren contacts zugeordnet werden kann. Scheinbar kann jeder contact nur eine cat haben (1:n). Wenn jeder contact in deiner Anwendung mehrere cat's haben kann (n:m), benötigst wie schon vorgeschlagen eine dritte Tabelle, welche die Verknüpfungen herstellt. Mir ist ebenfalls die kombination cat.id und cat.val in der Where-Clause nicht ganz geheuer. Dies deutet für mich darauf hin, dass in der Tabelle cat eine Kategorie mehrfach eingetragen sein kann jedoch mit einem anderen Wert!? Bei der Konzeption/Design von Datenbanken könnte dir evlt das weiterhelfen: http://fabforce.net/dbdesigner4/ grüße Martin
php::bar PHP Wiki - Listenarchive