Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Mam coś dla SQL-maniaków, problem z zapytaniem zagnierzdzonym powiązanym..
peksiarz
post
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 27.10.2006

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


mam zapytanie:

  1. SELECT pk1.id_kursu, pk1.id_przystanku, pk1.numer
  2. FROM przystanek_kursu pk1 (..)
  3. WHERE (..)pk1.id_przystanku = '$pocz' AND pk1.id_kursu IN (SELECT pk1.id_kursu
  4. FROM przystanek_kursu pk2
  5. WHERE pk2.id_przystanku = '$kon'



Powyższe zapytanie wyszukuje kursy na których jest zarówno przystanek początkowy jak i końcowy ale niestety nie wiem w jaki sposób wykluczyć kursy, które nie spełniają warunku:
Kod
numer przyst początkowego < numeru przyskanku końcowego

(czyli oczywiście przystanek pocz. musi być przed przystankiem końcowym na danym kursie)


Powyższe zapytanie zredukowałem do jednej tabeli aby nie zaciemniać.
Tabela:
"przystanek kursu' - id_kursu, id_przystasnku, numer

'$pocz' i '$kon' to oczywiście odwołania do zmiennych php zawierające konkretne dane

nie wiem czy dopisanie do zapytania wewnętrznego czegoś takiego ma sens:
  1. pk1.numer < pk2.numer




ma ktoś jakiś pomysł ?

Ten post edytował peksiarz 7.12.2006, 15:39:10
Go to the top of the page
+Quote Post
wipo
post
Post #2





Grupa: Zarejestrowani
Postów: 856
Pomógł: 19
Dołączył: 30.08.2005
Skąd: 100lica

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


A spróbuj tak:
Kod
SELECT pk1.id_kursu, pk1.id_przystanku, pk1.numer
FROM przystanek_kursu pk1 (..)
WHERE (..)pk1.id_przystanku = '$pocz' AND pk1.id_kursu IN (SELECT pk1.id_kursu
                                         FROM przystanek_kursu pk2
                                         WHERE pk2.id_przystanku = '$kon' ) and pk1.numer < pk2.numer

Czy to ma sens? Nie wiem bo nic nie napisałeś co to są za numery
Jeżeli są to kolejne przystanki i autobus jedzie w jedną stronę to ma sens, w przeciwnym nie wiem
Go to the top of the page
+Quote Post
peksiarz
post
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 27.10.2006

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


Cytat
Czy to ma sens? Nie wiem bo nic nie napisałeś co to są za numery
Jeżeli są to kolejne przystanki i autobus jedzie w jedną stronę to ma sens, w przeciwnym nie wiem


numery - sa to numery identyfikacyjne przystaknów na danym kursie a jeśli chodzi o kurs to w moim będzie tak, że gdy autobus jedzie z powrotem to już będzie inny kurs -będzie miał osobne id_kursu (chodzi o to, że często autobusy z powrotem jeżdzą troche inną trasą)

pk1 i pk2 są to oczywiście skrótowe nazwy które utworzyłem do tabeli przystanek kursu.


Myśle że końcówka dla tych założeń jest nielogiczna..
Kod
(..) AND pk1.numer < pk2.numer

niemożliwe jest aby w jednym cyklu zapytania SELECT porównywać numery różnych przystanków - no i to jest zasadniczy problem (IMG:http://forum.php.pl/style_emoticons/default/worriedsmiley.gif)

Ten post edytował peksiarz 7.12.2006, 17:59:18
Go to the top of the page
+Quote Post
wipo
post
Post #4





Grupa: Zarejestrowani
Postów: 856
Pomógł: 19
Dołączył: 30.08.2005
Skąd: 100lica

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


Jak chcesz je posortować malejąco lub rosnąco to zastosuj ORDER BY cos tam
Nie napisałeś dokładnie co chcesz uzyskać jako wynik końcowy więc strzelam
Go to the top of the page
+Quote Post
peksiarz
post
Post #5





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 27.10.2006

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


nie o to mi chodzi...

wyjaśnie to inaczej:
Chce wyszukać dwa różne przystanki (czyli 2 dane z jednego argumentu)

Takie zapytanie jest mi potrzebne do programu, w którym użytkownik będzie podawał przystanek początkowy i końcowy a zapytanie wyszuka z bazy kursy na których są te przystanki w odp kolejności.

Jeśli coś jeszcze nie jest jasne to prosze pytać.

Ten post edytował peksiarz 7.12.2006, 20:38:39
Go to the top of the page
+Quote Post
wipo
post
Post #6





Grupa: Zarejestrowani
Postów: 856
Pomógł: 19
Dołączył: 30.08.2005
Skąd: 100lica

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


A coś takiego:
select t1.pkt1, t2.pkt2 from tabela t1 join tabela t2 on t1.linia=t2.linia where t1.pkt1<t2.pkt2 and t1.pkt1='$pocz' and t2.pkt2='$konc'
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: 27.08.2025 - 09:28