Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak skonstruować zapytanie SQL (pilne!)
Forum PHP.pl > Forum > Bazy danych
Martio
Tablica "ogloszenie"
Kolumny: ogl_id

Wiersze:
1
2
3
4
5

Tablica "ogloszenie_opis"
Kolumny: ogl_id, opi_id

Wiersze:
1, 1
1, 2
1, 3
1, 4
1, 5
2, 1
3, 1
4, 3
5, 2
5, 3
5, 4

Tablica "ogloszenie_wyposazenie"
Kolumny: ogl_id, wyp_id
1, 1
1, 2
1, 3
2, 1
3, 1
4, 1
5, 1

Pytanie: jak pobrac z bazy danych ID ogloszenia (tabela: "ogloszenie", pole "ogl_id") przy tym, że "opi_id" tabeli "ogloszenie_opis" musi wynosić 1 i 2 i 3 oraz "wyp_id" 1 i 2?

Odpowiedź powinna być taka, że zwraca mi ID ogłoszenia = 1, gdyż tylko ogłoszenie ID 1 spełnia ten warunek (posiada wyp_id: 1, 2, 3 oraz opi_id: 1, 2).

Proszę o pomoc przy skonstruowaniu zapytania SQL. Może trochę namieszałem, ale również tak zamieszane jest to SQL.
Skobi
na szybko to chyba powinno byc tak:

  1. SELECT
  2. DISTINCT o.*
  3. FROM ogloszenie o LEFT OUTER JOIN ogloszenie_opis oo ON o.ogl_id = oo.ogl_id
  4. LEFT OUTER JOIN ogloszenie_wyposazenie ow ON o.ogl_id = ow.ogl_id
  5. WHERE oo.opi_id IN ( 1, 2 ) AND ow.wyp_id IN ( 1, 2, 3 )
Martio
Dziękuję. Jednak użycie operatora IN spowoduje, że zostaną pobrane wszystkie rekordy, które posiadają 1 LUB 2, a ja chciałbym wybrać wszystkie, które posiadają 1 ORAZ 2.

oo.opi_id in ( 1, 2 )

Próbuje tak:
oo.opi_id = 1 AND oo.opi_id = 2, ale to nie działa
dr_bonzo
  1. oo.opi_id = 1 AND oo.opi_id = 2, ale TO nie działa

No i nie bedzie dzialac bo jak "1" moze byc jednoczesnie "1" i "2"?

Cytat
Odpowiedź powinna być taka, że zwraca mi ID ogłoszenia = 1, gdyż tylko ogłoszenie ID 1 spełnia ten warunek (posiada wyp_id: 1, 2, 3 oraz opi_id: 1, 2).


Hmm musisz polaczyc EXISTS (istnieja rekordy z wyp_id...) i ALL.
Zreszta zaraz sprawdze.
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.