Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak skonstruować zapytanie SQL (pilne!)
Martio
post 5.10.2006, 11:25:45
Post #1





Grupa: Zablokowani
Postów: 167
Pomógł: 2
Dołączył: 15.02.2004

Ostrzeżenie: (30%)
XX---


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.
Go to the top of the page
+Quote Post
Skobi
post 5.10.2006, 11:53:27
Post #2





Grupa: Zarejestrowani
Postów: 174
Pomógł: 1
Dołączył: 19.02.2004

Ostrzeżenie: (10%)
X----


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 )
Go to the top of the page
+Quote Post
Martio
post 6.10.2006, 08:44:14
Post #3





Grupa: Zablokowani
Postów: 167
Pomógł: 2
Dołączył: 15.02.2004

Ostrzeżenie: (30%)
XX---


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
Go to the top of the page
+Quote Post
dr_bonzo
post 6.10.2006, 09:24:12
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


  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.


--------------------
Nie lubię jednorożców.
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 - 10:39