Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] Zapytanie - wybieranie rekordów oddalonych od siebie o jakąś wartość
Forum PHP.pl > Forum > Bazy danych
juzwa
mam tabelę z wartościami np:
1,2,3,4,5,6,7,8,9,10 itd

i teraz zaczynam od 1 i chcę wybrać wiersze oddalone o jakąś wartość np o 3
czyli mam
1,4,7,10,13,16 itd
nospor
najpierw:
  1. SET @i:=1;

a nastepnie
  1. SELECT tabela.*, @i:=@i+3 FROM tabela WHERE pole=@i
juzwa
dzięki za odpowiedź
a teraz gdyby rozszerzyć zabawę o punkty na płaszczyźnie
i mam wybrać punkty odległe od siebie o np 2,3 itd

czyli będzie teraz tak
(x,y) (1,1);(2,1);(2,3);(2,4);(3,1);
x i y w oddzielnych kolumnach + jakiś id oznaczające kolejność punktów

no to teraz jest problem jak to zrobić

bo przyjmując że każde dwa kolejne punkty leżą na prostej to wzór jest do znalezienia PIERWIASTEK((X2-X1)^2 + (Y2-Y1)^2) i jest jakaś odległość, ale wymaga ona działania takiego
PKT1
PKT2
PKT3
PKT4
1)porównuję PKT1 z PKT2 - odległość mniejsza niż chce => wiersz z PKT2 zostaje odrzucony
2)porównuję PKT1 z PKT3 - odległość OK - do zbioru wynikowego przechodzi PKT1 i PKT3
3)bazą do porównania staje się PKT3
i tak do końca

chyba zwykłym SQL-em nie da się tego zrobić, a trzeba by funkcję do tego napisać - chyba, że prostsze (szybsze, wydajniejsze) wyjście jest takie że pobrać jak leci a następie zbiór wynikowy obrobić w PHP np?
nospor
dodajesz drugą zmienna @j i lecisz jak wyzej smile.gif
juzwa
Cytat(nospor @ 4.02.2009, 10:30:26 ) *
dodajesz drugą zmienna @j i lecisz jak wyzej smile.gif


OK ale chyba dwie zmienne nie wystarczą?
potrzebne są X1,X2, Y1, Y2 i jakaś tymczasowa do przechowywania wyniku czyli np i


czyli :

  • [/list]

  • [/list]
    juzwa
    a co tu jest do rozumienia smile.gif

    zwyczajnie mam tablicę punktów
    KOLEJNOŚĆ|X|Y

    i chcę mieć takie wiersze które spełniają warunek, że punkty są oddalone od siebie o przynajmniej jakąś wartość (z tabeli posortowanej po kolejności)

    aby zmierzyć odległość muszę mieć koniec i początek (to jest w miarę logiczne) czyli dwa punkty (dwa sąsiadujące wiersze w tabeli posortowanej po kolejności)

    np jak na mapie masz pobrać punkty oddalone o co najmniej 50 km
    a w bazie masz kolejno
    GDYNIA. SOPOT, GDAŃSK, ELBLĄG,OLSZTYN, GRUDZIĄC, BYDGOSZCZ, TORUŃ

    i sprawdzasz
    START Z GDYNI
    1)z GDYNI do SOPOTU jest miej niż 50 więc SOPOT odpada
    2)z GDYNI do GDAŃSKA jest miej niż 50 więc GDAŃSK odpada
    3)z GDYNI do ELBLĄGA jest więcej niż 50 km więc do zbioru wynikowego przechodzą GDYNIA i ELBLĄG
    4)od teraz do porównania brany jest ELBLĄG
    5)z ELBLĄGA do OLSZTYNA jest więcej niż 50 km więc do zbioru wynikowego dochodzi OLSZTYN
    6)od teraz do porównania brany jest OLSZTYN

    i tak dalej

    mam nadzieję, że to jest dość jasno napisane i chodzi mi o skonstruowanie takiego SELECTA, który by na takiej zasadzie dawał tablicę wyników

    zadałem to pytanie na grupie dyskusyjnej i własnie tam zajrzałem i
    Tdobe
    poradził tak
    Cytat
    czemu nie zrobisz selekta który zwraca wszystkie odcinki miedzy
    punktami czyli (A, cool.gif i odleglosc, pozniej wystarczy posortować po
    odległości i gotowe?


    czyli niby wystarczy policzyć odległości między punktem A i B i zostawić te które mają odpowiednią wartość

    (HAVING wyrażenie >= wartosć)

    ale to chyba nie załatwia sprawy - bo

    A
    B A->B
    C B->C

    zakładając, że A->B jest mniejsza niż chcę to ja w przypadku C chciałbym aby to była A->C, a nie B->C

    nie widzę tego w jednym zapytaniu SQL - chyba, musi być procedura i pojedyncze zapytania o kolejne rekordy
  • Invision Power Board © 2001-2025 Invision Power Services, Inc.