Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL]Zapytanie, łączenie tablic
ShadowD
post 18.05.2011, 23:15:40
Post #1





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


Mam pytanie, jestem dość słaby w sql i mam problem na pewno banalny, a wymyślam nie stworzone rzeczy by go ogarnąć. :-)

Mam kilka tabel, relacje jeden do wielu, albo wiele do wielu - nie wiem sam w sumie, zaraz przedstawię na przykładzie.

Users:
id imie nazwisko
1 imie nazwisko
2 imie2 nazwisko2

Meta:
id idUsera nazwaWartości wartość
1 1 kolorSkóry czerwny
2 1 kolorOczu niebieski
3 1 miasto lublin

Łącze te tabele i chce wyciągnąć userów koloru skóry czerwonym i koloru oczu niebieskich, nie wiem jak powinno wyglądać zapytanie by szukało w złączonych tabelach. Napisałem:
kolorSkóry = czerwny or kolorOczu = niebieski Wyświetla wszystkich o kolorze oczu i skóry, ale ja chce by posiadali na raz te cechy a nie pojedynczo, to jest tylko przykład trochę ułatwiony, jest jakaś komenda która skarze szukać kolorSkóry = czerwny or kolorOczu = niebieski biorąc pod uwagę, że idUsera w obu polach ma być to samo by pobrać wynik? (Tabele łączę - "jojn"'em.)


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
PanGuzol
post 19.05.2011, 02:33:02
Post #2





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


Po co takie coś?
Dodaj do pierwszej tabeli kolumny 'kolorSkóry', 'kolorOczu', 'miasto' zamiast kombinować z relacjami.


--------------------
Sposób na życie? Uśmiech na twarzy :D
"Widzę więcej, wiem więcej, tak to jest mniej więcej"
"NIE kradnij, rząd nielubi konkurencji"
Go to the top of the page
+Quote Post
ShadowD
post 19.05.2011, 06:33:34
Post #3





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


No właśnie jak bym mógł bym to zrobił, ale dorabiam coś do strony i ktoś to tak zaprojektował a całość stoi na woedpresie z kilkoma dodatkami i nie mogę tego zmienić, a wszystkie dane są tak trzymane - około 30 typów, domyślam się, że te typy są edytowalne więc dla tego ktoś to tak wymyślił, nie wiem czy nie dało się lepiej...

Ma ktoś jakiś pomysł?


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
nospor
post 19.05.2011, 06:43:04
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. SELECT * FROM users u
  2. LEFT JOIN meta m1 ON (m1.idUsera=u.id AND m1.nazwaWartosci='kolorSkóry' AND m1.wartosc='czerwony')
  3. LEFT JOIN meta m2 ON (m2.idUsera=u.id AND m2.nazwaWartosci='kolorOczu' AND m2.wartosc='niebieski')
  4. WHERE m1.id IS NOT NULL AND m2.id IS NOT NULL


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
ShadowD
post 19.05.2011, 10:59:37
Post #5





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


Mam tak:
  1. SELECT * FROM wp_posts post
  2. LEFT JOIN wp_term_relationships rs ON rs.object_id=post.id
  3. LEFT JOIN wp_terms value ON (value.term_id=rs.term_taxonomy_id AND value.name="Panie")

Bez AND value.name="Panie") dostaję około 900 rekordów i z to samo, a nie które rekordy pole name mają na 100% puste, dlaczego tak się dzieje?

Edit:
Dałem bez left i działa, ale dlaczego tak?

Ten post edytował ShadowD 19.05.2011, 11:06:19


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
nospor
post 19.05.2011, 11:37:52
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Panie kolego, ale w mojej wersji jest jeszcze:
WHERE m1.id IS NOT NULL AND m2.id IS NOT NULL
To jest bardzo ważna częśc zapytania, którą w swojej wersji raczyłeś olać... tongue.gif


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
ShadowD
post 19.05.2011, 14:02:03
Post #7





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


Z Pana częścią (ostatnia linią) wyni jest identyczny, więc coś jest nie tak, zaraz dokładnie opiszę problem bo sam chyba nie dam rady. :-)


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
nospor
post 20.05.2011, 06:44:03
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Powiem tak: konstrukcję co ci podałem używam w pewnym serwisie i działa jak ta lala.
Konstrukcję co ty pokazałeś, wygląda inaczej niż to co ja ci pokazałem, te left joiny są inne, więc tu zapewne leży problem.


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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: 14.08.2025 - 08:07