Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL] Wyciaganie wszystkich id z pierwszej tabeli nawet jesli nie ma powiazania z drugą
neo1986kk
post
Post #1





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

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


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?
Go to the top of the page
+Quote Post
Rysh
post
Post #2





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Poczytaj o: LEFT JOIN, RIGHT JOIN, JOIN
Go to the top of the page
+Quote Post
neo1986kk
post
Post #3





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

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



  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

Ten post edytował neo1986kk 28.09.2015, 18:00:20
Go to the top of the page
+Quote Post
Rysh
post
Post #4





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


Patrzyłeś samego JOIN'a ?
Go to the top of the page
+Quote Post
neo1986kk
post
Post #5





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

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


  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

Ten post edytował neo1986kk 28.09.2015, 18:14:27
Go to the top of the page
+Quote Post
Rysh
post
Post #6





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


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
Go to the top of the page
+Quote Post
neo1986kk
post
Post #7





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

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


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



Ten post edytował neo1986kk 28.09.2015, 18:35:01
Go to the top of the page
+Quote Post
kapslokk
post
Post #8





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


  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?

Ten post edytował kapslokk 28.09.2015, 18:49:07
Go to the top of the page
+Quote Post
neo1986kk
post
Post #9





Grupa: Zarejestrowani
Postów: 561
Pomógł: 3
Dołączył: 2.02.2009

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


Też działa prawidłowo

Sorry, dziala o wiele lepiej, rzeczywiście wcześniej podstawiało obojętne którego usera

Ten post edytował neo1986kk 28.09.2015, 21:01:19
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 3.10.2025 - 23:09