Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL]Zapytanie, łączenie tablic
ShadowD
post
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.)
Go to the top of the page
+Quote Post
PanGuzol
post
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.
Go to the top of the page
+Quote Post
ShadowD
post
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ł?
Go to the top of the page
+Quote Post
nospor
post
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
Go to the top of the page
+Quote Post
ShadowD
post
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
Go to the top of the page
+Quote Post
nospor
post
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ć... (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
ShadowD
post
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. :-)
Go to the top of the page
+Quote Post
nospor
post
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.
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: 21.09.2025 - 06:59