Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL]Zapytanie, łączenie tablic
Forum PHP.pl > Forum > Przedszkole
ShadowD
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.)
PanGuzol
Po co takie coś?
Dodaj do pierwszej tabeli kolumny 'kolorSkóry', 'kolorOczu', 'miasto' zamiast kombinować z relacjami.
ShadowD
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ł?
nospor
  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
ShadowD
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?
nospor
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
ShadowD
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. :-)
nospor
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.
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.