Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Operacja na tablicach, nie wiem jak to ugryźć.
Forum PHP.pl > Forum > Przedszkole
qqwwq
Witam,

Mam problem z wykombinowaniem rozwiązania dla mojego zadania. A dokładniej, posiadam dwie tabele w bazie:

miasta
miasto_id
sesja_id
miasto_nazwa
miasto_x
miasto_y

polaczenia
polaczenia_id
polaczenia_z_id
polaczenia_do_id
polaczenia_czas
polaczenia_koszt

W tabeli z miastami, jest zapisywana nazwa miasta, i jego współrzędne, pole sesji póki co jest nieważne.
W tabeli z połączeniami, dodaję sobie połączenia między miastami, czyli zapisuje mi tam ID miasta z którego i do którego jest połączenie, oraz można jeszcze wprowadzić czas i koszt.

Do czego teraz dążę. Chciał bym obliczyć drogę między wszystkimi miastami w bazie, które mają połączenia między sobą, i później przedstawić to w postaci tabelki. Póki co, udało mi się narysować tabelkę, z etykietami miast:

  1. <?
  2. include("config.php");
  3.  
  4. $sql = "SELECT * FROM `miasta` ORDER BY `miasto_nazwa` ASC";
  5. $wynik = mysql_query($sql);
  6. $wynik2 = mysql_query($sql);
  7.  
  8. $array = mysql_fetch_array(mysql_query($sql));
  9. $numrows = count($array);
  10.  
  11. $tabela = '<div class="tabela">
  12. <table cellspacing="0">
  13. <tr>
  14. <td> </td>';
  15.  
  16. while ($dane = mysql_fetch_array($wynik)) {
  17. $tabela .= '
  18. <td>'.$dane[2].'</td>';
  19. }
  20.  
  21. $tabela .= '
  22. </tr>';
  23.  
  24. while ($dane2 = mysql_fetch_array($wynik2)) {
  25. $tabela .= '
  26. <tr>
  27. <td>'.$dane2[2].'</td>';
  28.  
  29. for($x=0;$x<$numrows;$x++){
  30. $tabela .= '
  31. <td> </td>';
  32. }
  33. $tabela .= '
  34. </tr>';
  35. }
  36.  
  37. $tabela .= '
  38. </table>
  39. </div>';
  40.  
  41. ?>


I teraz nie mam pojęcia, w jaki sposób mam znaleźć miasta które mają ze sobą połączenie, i dla nich liczyć odległości i uzupełniać w tej tabeli.
Odległość będę liczył ze wzoru pitagorasa, czyli coś jak sqrt((miasto1_x - miasto2_x)*(miasto1_x - miasto2_x)+(miasto1_y - miasto2_y)*(miasto1_y - miasto2_y)) ...

Za wszelkie uwagi i podpowiedzi serdecznie dziękuję.
thek
Pytanie zasadnicze... Co masz na myśli pisząc "miasta mają połączenie ze sobą"? Czy proste:
a) biorę tabelę połączenia, wyszukuję id miast z tabeli miast i sprawdzam ich współrzędne a z nich obliczam odległość,
czy może:
cool.gif biorę dwa miast i sprawdzam czy istnieje między nimi możliwość połączenia nie tylko bezpośredniego, ale i pośredniego poprzez jakąś drogę wspólną i kilka miast.

Przypadek a) jest banalny bo to zwykły JOIN po polaczenia_z_id oraz polaczenia_do_id

Przypadek cool.gif to już niestety ale zabawa z implementowaniem własnego systemu wyszukiwania połączeń, którego po stronie bazy w sumie nie wykonasz z racji karkołomności i możliwych ogromnych obciążeń bazy. To już bliższe dość znanemu "problemowi komiwojażera" i nie ma jednoznacznego, wydajnego, rozwiązania.
qqwwq
Cieszę się że to będzie banalne winksmiley.jpg

Cały ten skrypcik, to ma być problem komiwojażera, tylko właśnie z założeniem, że nie ma dostępnych połączeń między wszystkimi miastami, i później jeszcze trzeba uwzględnić czas czy koszt danej trasy.

Ogólnie, to chciał bym po pierwsze mieć te wyniki wydrukowane na stronie w tej tabeli, i po drugie, mieć je w jakiejś tablicy aby wygodnie na nich działać, i np. odnosić się do tego z jakiejś zmiennej, $myArray[3][4] - i w ogóle super by było, jak by te numerki 3 i 4, jako numer kolumny i rzędu, były nie numerami kolejnych rzędów, tylko ID miast albo nazwami poszczególnych nazw. Nie wiem czy dobrze kombinuję z operowaniem na ID a nie na miastach, czy się nie pogubię ... ale myślę że ja już by była ta tablica, to później uzupełnienie tabelki na stronce to nie problem winksmiley.jpg

Acha, i dla ułatwienia, przy dodawaniu połączenia np. między Bydgoszczą a Gdańskiem, jednocześnie jest dodawane do bazy identyczne połączenie między Gdańskiem a Bydgoszczą - wtedy tylko po jednej kolumnie, np. miasta_z_id - można sprawdzać te połączenia ( przynajmniej tak mi się wydaje )

Dziękuję za odpowiedź smile.gif
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.