Czesc, mam nastepujacy problem z zapytaniem: uzytkownik moze miec item'y lub moze miec grupy ktore maja itemy.

W tym pierwszym przypadku dane sa przechowywane w tabeli user_to_items, zas w drugim mamy item_to_groups
Potrzebuje 1 zapytanie wyciagnac id oraz name itemow:

  1. SELECT DISTINCT(item.id), item.name
  2. FROM items
  3. LEFT JOIN user_to_item ON user_to_item .item_id = item.id
  4. LEFT JOIN item_to_group ON item_to_group.item_id = item.id
  5. WHERE 1
  6. AND user_to_item.user_id = 117
  7. AND item_to_group.group_id IN (77,75,76,81,82)


Jak widac, mam podane group_id. Problem jest taki ze te warunki sie wykluczaja bo mam AND user_to_item.user_id = 117 oraz AND item_to_group.group_id IN (77,75,76,81,82) i wynik jest 0.
Gdy zas usune AND user_to_item.user_id = 117 z sql'a to otrzymam wyniki odpowiednie dla tego drugiego warunku (AND item_to_group.group_id IN (77,75,76,81,82) ) niestety trace wtedy to co jest w tabeli user_to_item. I na odwrot to samo - jak zostawie warunek dla user_to_item to otrzymam wyniki z tej tabeli jednak strace to co jest w item_to_group.

Czy moge to wyciagnac jakos 1 zapytaniem?


pzdr,
misty

dobra, rozwiazanie okazalo sie banalne, wystarczylo uzyc or:


SELECT DISTINCT(item.id), item.name
FROM items
LEFT JOIN user_to_item ON user_to_item .item_id = item.id
LEFT JOIN item_to_group ON item_to_group.item_id = item.id
WHERE 1
AND( user_to_item.user_id = 117
or item_to_group.group_id IN (77,75,76,81,82) )


pzdr,
misty