Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] Wyciaganie wszystkich id z pierwszej tabeli nawet jesli nie ma powiazania z drugą
Forum PHP.pl > Forum > Przedszkole
neo1986kk
Witam mam 2 tabele

rodzaje jablek

id | rodzaj
1 | zielone
2 | czerwone

i drugą tabelę, która zawiera informacje, które jablka moga jeść użytkownicy

ktore mogą jeść

rodzaj| user| avaliable
1 | 1 | 1
2 | 1 | 1
3 | 2 | 1

no to łatwo wyczytać że user 1 moze jest zielone, user 2 moze jesc zielone, user 3 moze jesc czerwone, ale ja chce zrobic sobie listę które moze, a które nie, czyli wysylam id uzytkownika do bazy i tworze taki o to SQL:

  1. SELECT at.rodzaj, mj.avaliable FROM apple_types at LEFT JOIN moze_jesc mj WHERE mj.user=3


i to mi pokazuje tylko ze user 3 moze jesc jablka czerwone, a chcialbym zeby pojawił się tez wiersz że nie moze jeść zielonych czyli coś w stylu:

ar.rodzaj | mj.avaliable
zielone | NULL
czerwone | 1

domyslame sie ze to "where mj.user=3" tutaj psuje konstrukcje.

jeszcze próbowałem coś takiego
  1. SELECT at.rodzaj, mj.avaliable FROM apple_types at LEFT JOIN moze_jesc mj LEFT JOIN users u ON mj.user=u.id

ale to tez nie dziala

jakies sugestie?
Rysh
Poczytaj o: LEFT JOIN, RIGHT JOIN, JOIN
neo1986kk

  1. SELECT at.rodzaj, mj.avaliable FROM apple_types at LEFT JOIN moze_jesc mj LEFT JOIN users u ON mj.user=u.id




To zapytanie dziala ok, ale jak już dodam where


  1. SELECT at.rodzaj, mj.avaliable FROM apple_types at LEFT JOIN moze_jesc mj LEFT JOIN users u ON mj.user=u.id WHERE u.id=4


No to niestety nie wyświetla nic, a powinien pokazac

rodzaj | avaliable
zielone | NULL
czerowne | NULL
Rysh
Patrzyłeś samego JOIN'a ?
neo1986kk
  1. SELECT at.rodzaj, mj.avaliable FROM apple_types at JOIN moze_jesc mj JOIN users u ON mj.user=u.id WHERE u.id=4


nadal bez zmian, chociaż w sumie rożnica polega na tym że przy LEFT JOIN bez tego WHERE to chociaż pokazywał wszystkie, a tak nie pokazuje nic
Rysh
Masz dwa JOIN, teraz widzę że w obu przypadkach zmieniłeś na samo JOIN.
https://dev.mysql.com/doc/refman/5.0/en/join.html
neo1986kk
Kombinowałem już na wszystkie sposoby, pierwsze JOIN zamieniałem na LEFT JOIN i odwrotnie i nadal nie moge osiągnąć wyniku, pewnie rozbije to na 2 zapytania...


  1. SELECT at.rodzaj, mj.avaliable FROM apple_types at LEFT JOIN moze_jesc mj ON at.id=mj.rodzaj JOIN users u WHERE u.id=4



w ten sposób zadziałało

kapslokk
  1. SELECT
  2. at.rodzaj,
  3. mj.available
  4. FROM
  5. apple_types at
  6. LEFT JOIN moze_jesc mj ON
  7. at.id = mj.rodzaj && mj.user = 3

Sprawdz takie zapytanie.

Joinujesz userow, ale nie piszesz po jakich polach masz połączyć te tabele, a to zdaje się tworzy iloczyn kartezjański z tych tabel?
neo1986kk
Też działa prawidłowo

Sorry, dziala o wiele lepiej, rzeczywiście wcześniej podstawiało obojętne którego usera
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.