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