Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie, które wyświetli niespróbowane ciastka przez konkretne dziecko.
Forum PHP.pl > Forum > Bazy danych > MySQL
billy235
Witam, mam taką bazę.

TAB: ciastka
id
nazwa

TAB: dzieci
id
imie

TAB: Dzieci-Ciastka
id_ciastka
id_dziecka

Baza opisuje które dziecko spróbowało które ciastko.

Jak chcę wyświetlić ciastka które zostały spróbowane przez dziecko o id=2 to jest tak:
  1. SELECT c.nazwa FROM ciastka c
  2. LEFT JOIN `Dzieci-Ciastka` d_c ON c.id=d_c.id_ciastka
  3. WHERE d_c.id_dziecka='2'


To działa ale ja potrzebuje w drugą stronę.
Których ciastek jeszcze nie próbowało dziecko o id=2
Bardzo proszę o pomoc.
uupah5
generalnie:
Kod
select * from t1 [left | right] outer join t2
on t1.id=t2.id
where [t1 | t2].id is null;


reszta w manualu mysql http://dev.mysql.com/doc/refman/5.0/en/join.html
Niktoś
Sam nie wiem czy dobrze kombinuje:
  1. ON c.id!=d_c.id_ciastka

ale można spróbować.
billy235
Próbuje na wiele sposobów ale żaden nie działa.

Zapominacie przede wszystkim że to musi być dla konkretnego dziecka o np id =2


-----------------------------------------------------

Wydaje mi się że znalazłem odpowiedź, ale z pomocą podzapytania. Z pomocą złączeń zewnętrznych chyba się nie dało.

  1. SELECT c.id, c.nazwa, c.kolor, ...
  2. FROM ciastka c
  3. WHERE c.id NOT IN (
  4.  
  5. SELECT c_d.id_ciastka
  6. FROM dzieci d, `dzieci-ciastka` c_d
  7. WHERE d.id = c_d.id_dziecka
  8. AND d.id =2
  9.  
  10. )


zatem podzapytanie
  1. SELECT c_d.id_ciastka
  2. FROM dzieci d, `dzieci-ciastka` c_d
  3. WHERE d.id = c_d.id_dziecka
  4. AND d.id =2


Wybiera nam id ciastka które próbowało dziecko o id=2.

Wypisujemy wszystkie ciastka i jeśli nie były próbowane przez to dziecko to wyświetlamy.

Zostawiam dla Potomnych chyba ze ktoś wymyśli lepsze rozwiązanie.
uupah5
Cytat(billy235 @ 12.12.2011, 19:43:20 ) *
Próbuje na wiele sposobów ale żaden nie działa.
Zapominacie przede wszystkim że to musi być dla konkretnego dziecka o np id =2


join czy to outer czy nie - to dalej standardowy select, czyli możesz użyć zarówno where jak i having
także nie trzeba kombinować z subquery. jeśli nie zależy Ci na wydajności a danych jest mało - zostań przy swoim rozwiązaniu.

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.