Hirdetés

Új hozzászólás Aktív témák

  • nyunyu

    félisten

    válasz Taci #5051 üzenetére

    N:M kapcsolatnak pont az a lényege, hogy külön-külön lekérdezhető mindegyik variációja.

    Teszemazt van egy product táblád:
    id name
    1 alma
    2 körte
    3 banán
    4 szilva
    5 narancs

    van egy categoryd:
    id name
    1 piros
    2 sárga
    3 zöld
    4 kék
    5 narancssárga

    Ezeket összerendelő product_category táblád:
    product_id category_id
    1 1
    1 2
    1 3
    2 2
    3 2
    4 4
    5 1
    5 5

    Ha erre ráuszítod az előző querymet c.name like '%sár%'-ral, akkor ki fogja neked listázni az almát, körtét, banánt, narancsot, mert azok SÁRga vagy narancsSÁRga kategóriásak.

    Ha azt akarod kérdezni, hogy melyik az a termék, amiből van sárga és piros is, akkor kétszer kell a product_category-t és a categoryt joinolni, és azokat ANDdal kérdezni:
    select p.*
    from product p
    join product_category pc1
    on pc1.product_id = p.id
    join category c1
    on c1.id = pc1.category_id
    join product_category pc2
    on pc2.product_id = p.id
    join category c2
    on c2.id = pc2.category_id
    where c1.name = 'sárga' and c2.name = 'piros'
    order by p.date desc;

    Ez már csak az almát találná meg.

    Ha ezt írnád:
    where c.name = 'sárga'
    or c.name = 'piros'
    or c.name = 'kék'

    vagy az ezzel ekvivalens
    where c.name in ('sárga','piros','kék')
    feltételt, akkor az összes sárga vagy piros vagy kék gyümölcs lejönne (alma, körte, banán, szilva)
    Narancs nem, mert itt kategórianévre teljes egyezés a feltétel!

Új hozzászólás Aktív témák