phpbar.de logo

Mailinglisten-Archive

[php] OT: mysql klausel gesucht SOLVED

[php] OT: mysql klausel gesucht SOLVED

Michael Borchers list at tridemail.de
Fre Sep 15 11:32:51 CEST 2006


> Korrektur!
>
> Martin Adler wrote:
>> 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.
>
> Ich sehe gerade es ist eine n:m Beziehung...
> Du brauchst definitiv eine dritte Tabelle. dann konnte der Query so
> aussehen.
>
> SELECT `contacts`.*, `cat`.`id`, `cat`.`val`
> FROM
>     `contacts` INNER JOIN
>     `contacts_has_cat` ON `contacts`.`id` =
> `contacts_has_cat`.`contacts_id` INNER JOIN
>     `cat` ON `contacts_has_cat`.`cat_id` = `cat`.`id`
> WHERE
>     (`cat`.`id` = 14 AND `cat`.`val` = 144)
>     OR
>     (`cat`.`id` = 18 AND `cat`.`val` = 188)
>
> Hab nun auch gesehen das eine Kategorie auch mehrere Werte enthalten
> kann. Diese Werte sollten im Grunde auch in eine extra Tabelle
> ausgelagert und mit der Kategorie verknüpft werden.
>
> So hoffe mir ist nicht wieder weiteres, wesentliches entgangen.


es gibt in der tat eine lösung ohne dritte tabelle, nämlich mit subselects.
die gehen natürl. erst ab mysql 4.1 ;)

bsp:
SELECT contacts_id
FROM contacts
WHERE contacts_id
IN (

SELECT contacts_id
FROM contacts_categories_values
WHERE contacts_categories_id =2
AND contacts_categories_options_id =16
)
LIMIT 0 , 30 


php::bar PHP Wiki   -   Listenarchive