![]() |
![]() |
![]()
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 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
|
|
|
![]()
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? |
|
|
![]()
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)
|
|
|
![]()
Post
#5
|
||
Grupa: Zarejestrowani Postów: 144 Pomógł: 0 Dołączył: 10.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
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 : POW((SELECT MIN(tt_valueY) FROM tmptable ttY2 WHERE ttY2.`id_tt`>tt.id_tt )-tt.tt_valueY,2) ) >= 5; /*5 - minimalna akceptowana odległość punku A i B*/ [/list] [SQL] t = 2 ; SET @i:=SQRT(POW(@x2-@x1,2)+POW(@y2-@y1,2)); [/list] |
|
![]()
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 |
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 10:11 |