Ja jednak pozostane przy tym zapytaniu. Juz napisalem odpowiednia funkcje ktora mi konstrułuje zapytanie i mysle ze tak bedzie ok.
Poza tym jak gdzies czytalem, aby efektywnie serwis dzialal zaleca sie wykonanie do 4 zapytan na strone... przy odzielnym zapytaniu o wage kazdej krawedzi tych zapytan wtykonalbym duzo.
Do komunikacji z bazy uzywam PDO i przy okazji zauwazylem ze nie jest mozliwe bindowanie dwa razy tej samej danej np:
SELECT SUM(waga) FROM nastepniki WHERE (id_obiekt=:punkt0 AND wierzcholek=punkt1) OR (id_obiekt=:punkt1 AND wierzcholek=:punkt2);
trzeba kazda dana podpinac osobno, czyli:
SELECT SUM(waga) FROM nastepniki WHERE (id_obiekt=:punkt0 AND wierzcholek=:punkt1) OR (id_obiekt=:punkt2 AND wierzcholek=:punkt3);
powyzsze zapytanie nie sprawdzalo sie jezeli jrawedzie sciezka zawierala powtarzajace sie krawedzie
Sprawdza sie zaytanie tego typu:
SELECT TIME_FORMAT(SUM(waga),'%H:%i') aaa FROM ( SELECT waga FROM nastepniki WHERE id_obiekt=p1 AND wierzcholek=p2 UNION ALL
SELECT waga FROM nastepniki WHERE id_obiekt=p2 AND wierzcholek=p3 UNION ALL
....
SELECT waga FROM nastepniki WHERE id_obiekt=p(n) AND wierzcholek=p(n+1)
) AS waga;
To zapytanie dziala poprawnie
Tylko pojawil mi sie pewien problem: wage krawedzi mam podana w formie czasu (typ danej w bazie: time). Wszystko dziala ok dopoki np. minut nie bedzie wiecej niz 60. Bez TIME_FORMAT - dziala wporzadku. ale chcialbym zeby baza zwrocila mi wynik w postaci hh:mm. jak to zrobic??
powyzsze zapytanie nie sprawdzalo sie jezeli jrawedzie sciezka zawierala powtarzajace sie krawedzie
Sprawdza sie zaytanie tego typu:
SELECT TIME_FORMAT(SUM(waga),'%H:%i') aaa FROM ( SELECT waga FROM nastepniki WHERE id_obiekt=p1 AND wierzcholek=p2 UNION ALL
SELECT waga FROM nastepniki WHERE id_obiekt=p2 AND wierzcholek=p3 UNION ALL
....
SELECT waga FROM nastepniki WHERE id_obiekt=p(n) AND wierzcholek=p(n+1)
) AS waga;
To zapytanie dziala poprawnie
Tylko pojawil mi sie pewien problem: wage krawedzi mam podana w formie czasu (typ danej w bazie: time). Wszystko dziala ok dopoki np. minut nie bedzie wiecej niz 60. Bez TIME_FORMAT - dziala wporzadku. ale chcialbym zeby baza zwrocila mi wynik w postaci hh:mm. jak to zrobic??