Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Mam coś dla SQL-maniaków
Forum PHP.pl > Forum > Bazy danych > MySQL
peksiarz
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ł ?
wipo
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
peksiarz
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 worriedsmiley.gif
wipo
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
peksiarz
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ć.
wipo
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'
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.