Autor Zpráva
dan55
Profil
Ahoj,
potřebuji seřadit nabídky na tržišti podle vzdálenosti.
Souřadnice jsou ve tvaru x a y, jak to seřadit podle vzdálenosti uživatele, který si zobrazí nabídky na tržišti?
Jde to přímo SQL dotazem nebo to musím nacpat do pole a pak to nějak seřadit? Díky moc...
Joker
Profil
dan55:
No schválně- Rozdíl souřadnic X, rozdíl souřadnic Y a vzdálenost mezi dvěma body tvoří pravoúhlý trojúhelník, kde vzdálenost je přepona.
Takže jak zní Pythagorova věta?
dan55
Profil
Joker:
Dík za nakopnutí, jak zní Pythagorova věta vím, nedávno jsme se ji učili (no, vlastně půl roku to je).
No ale nevím jak to napsat do PHP, nechci hotový script, spíš jen větší nakopnutí ;)
l564
Profil
Joker:
Pythagorova věta?
Pouze doplním:
A² = C² - B²
B² = C² - A²
C² = A² + B²


o_O
Děkuji za upozornění
o_O
Profil
l564:
Pouze doplním:
a, b, c ≠ A, B, C :)

Bod b.
Stano
Profil *
l564, Joker
nemyslím že mal problém vypočítať vzdialenosť ale skôr sa pýtal ako napísať query tak aby to počítal už na strane databázy...
dan55
Profil
Stano:
Ano, výpočet vzdálenosti mám už hodně dávno hotový, spíš potřebuji SQL dotaz nebo případně jak to seřadit.
Stano
Profil *
no ja v podstate neviem či má nejaký zmysel to cele spočítať už priamo v databáze. lebo na väčšine serverov sú práve databázy preťažené a nestíhajú. ale určite by ma zaujímalo ako ten dotaz vyzerá. ešte som také niečo nepotreboval takže som to neskúmal.

v php to môžeš spraviť na tento spôsob:
$výsledky = pole so všetkými výsledkami array(array(x => 3, y => 4, nick => Stano), array(x => 3, y => , nick => Fero));
$moj_x = 10;
$moj_y = 10;

foreach($vysledky as $vysledok){
  $vzdialenost = sqrt(pow($vysledok["x"]-$moj_x,2) + pow($vysledok[$i]["y"]-$moj_y,2));
  $vzdialenosti[$vysledok["nick"]] = $vzdialenost;
  }

asort($vzdialenosti);  /zoradí od najmenšieho po najväčšie
 
$i = 0;  
foreach($vzdialenosto as $nick => $vzdialenost){
  if($i < 10){
    echo $nick."<br />";
    }
   $i++;
  }


je možné že tam mám chyby. neskúšal som to. ale hádam si s týmto už poradíš.
Marek88
Profil
No pokud máš aktuální souřadnice uložené v php například v proměnných $x a $y a v databázi máš sloupce x a y, tak bych zkusil přidat do dotazu:
ORDER BY POW($x-x, 2)+POW($y-y, 2)

EDIT: Opraven výpočet vzdálenosti
dan55
Profil
Marek88:
Super, funguje ;)
Stano:
Tobě také děkuji za to druhé řešení, možná ho použiji jinde :)
o_O
Profil
l564:
o_O
Děkuji za upozornění
Promiň, ale reagoval jsem na tvůj obrázek, který tam byl když jsem navštívil toto téma.

Správně to má být malým (což bylo na obrázku špatně)

Když už jsem příspěvek zaslal, obrázek byl fuč...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0