Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapytanie, które wyświetli niespróbowane ciastka przez konkretne dziecko.
billy235
post 12.12.2011, 14:02:44
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 1
Dołączył: 2.10.2007

Ostrzeżenie: (0%)
-----


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.

Ten post edytował billy235 12.12.2011, 19:48:16
Go to the top of the page
+Quote Post
uupah5
post 12.12.2011, 14:55:13
Post #2





Grupa: Zarejestrowani
Postów: 207
Pomógł: 18
Dołączył: 4.09.2010
Skąd: warszawa

Ostrzeżenie: (0%)
-----


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

Ten post edytował uupah5 12.12.2011, 14:55:42
Go to the top of the page
+Quote Post
Niktoś
post 12.12.2011, 15:17:18
Post #3





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Sam nie wiem czy dobrze kombinuje:
  1. ON c.id!=d_c.id_ciastka

ale można spróbować.
Go to the top of the page
+Quote Post
billy235
post 12.12.2011, 19:43:20
Post #4





Grupa: Zarejestrowani
Postów: 27
Pomógł: 1
Dołączył: 2.10.2007

Ostrzeżenie: (0%)
-----


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.

Ten post edytował billy235 12.12.2011, 19:46:05
Go to the top of the page
+Quote Post
uupah5
post 13.12.2011, 08:48:36
Post #5





Grupa: Zarejestrowani
Postów: 207
Pomógł: 18
Dołączył: 4.09.2010
Skąd: warszawa

Ostrzeżenie: (0%)
-----


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.

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.08.2025 - 04:37