Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL] Zapytanie - wybieranie rekordów oddalonych od siebie o jakąś wartość, jak to zrobić
juzwa
post
Post #1





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 10.07.2006

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




najpierw:
  1. SET @i:=1;

a nastepnie
  1. SELECT tabela.*, @i:=@i+3 FROM tabela WHERE pole=@i
Go to the top of the page
+Quote Post
juzwa
post
Post #3





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 10.07.2006

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


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?
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




dodajesz drugą zmienna @j i lecisz jak wyzej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
juzwa
post
Post #5





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 10.07.2006

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


Cytat(nospor @ 4.02.2009, 10:30:26 ) *
dodajesz drugą zmienna @j i lecisz jak wyzej (IMG:http://forum.php.pl/style_emoticons/default/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]
  • +Quote Post
    nospor
    post
    Post #6





    Grupa: Moderatorzy
    Postów: 36 557
    Pomógł: 6315
    Dołączył: 27.12.2004




    myslalem ze chodzi ci o identyczna sytuacje jak na początku, tylko ze z dwoma parametrami.
    Czyli jak cos ma byc odlegle od 2,3 to jeden parametr zwiekszasz o 2 a drugi o 3.
    I tyle w temacie.

    Ale patrzac na kombinacje jakie robisz, to chyba chodzi ci ocos innego, ale za groma nie kumam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
    Moze ktos inny zalapie i ci pomoze
    Go to the top of the page
    +Quote Post
    juzwa
    post
    Post #7





    Grupa: Zarejestrowani
    Postów: 144
    Pomógł: 0
    Dołączył: 10.07.2006

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


    a co tu jest do rozumienia (IMG:http://forum.php.pl/style_emoticons/default/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, (IMG:http://forum.php.pl/style_emoticons/default/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
    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: 23.08.2025 - 10:11