![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 24.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam pewein problem odnosie zapytania do bazy danych oto tabelka:
Tabelka reprezentije graf. Krawedz w grafie zapisuje jako (pierwszy punkt, drugi punkt, waga). dla prszykladu mam taka sciezke: 1,6,7,12,4 i chce aby baza zwrocila mi wagi (ewentualnie ich sume) poszczegolnych krawedzi. Czy da sie skrocic jakos to zapytanie:
Jestem poczetkujacy w SQL. Uzywam MySQL 5. Prosze o podpowiedz -- Kuba |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 20.04.2006 Skąd: Kraków/Lublin/Lubartów Ostrzeżenie: (0%) ![]() ![]() |
A w czym będziesz tą bazę wykorzystywał? w php? Ja jakoś nie widzę możliwości uproszczenia tego zapytania jeżeli chcesz otrzymać odpowiedź bezpośrednio z bazy. ewentualnie jeżeli chcesz dostać sumę to zamiast select waga from, wpisujesz select SUM(waga) from i dostaniesz na wyjściu sumę wag.
Jeśli zapytanie będzie wykonywane spod jakiegokolwiek języka programowania, to chyba najlepiej byłoby sumować to na poziomie języka, czyli napisać funkcję która czyta wagi pomiędzy punktami, a potem ją wywoływać cyklicznie dla wszystkich par wierzchołków. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 24.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Baze wykorzystuje w php 5.
Glownie chodzi mi o to ze zapytanie w takiej frormie jak powyzej bede musial generowac dynamicznie (tzn przy pomocy jakiej petli), w zaleznosci od tego ile krawedzi bede mial. Gdyby dalo sie uproscic to zapytanie aplikacja dzialalaby troszke szybciej:) Co do sumownia wynikow: uczyli mnie na studiach (nie wiem czy to jest zgodne z praktyka:) ), ze operacje na danych typu sortowanie, zliczanie itp. lepiej zrzucic na baze. Powinna miec ona juz zoptymalizowane funkcje. Poza tym niweluje sie troche czasu na przypisanie danych z bazy do zmiennych w danym jezyku programowania i przetworzenie tych danych.... |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 20.04.2006 Skąd: Kraków/Lublin/Lubartów Ostrzeżenie: (0%) ![]() ![]() |
Obawiam się że nie bardzo jest jak uprościć. Musisz podać wszystkie pary wierzchołków bazie, bo inaczej bania. Jeśli chodzi o sumowanie to po prostu piszesz
i masz zwróconą sumę wag odpowiadających zapytaniu. W tej sytuacji ja jednak wykonałbym ileśtam osobnych zapytań i zliczył te wagi programowo bo tworzenie zapytania w locie za pomocą pętli wydaje mi się tak samo skomplikowane albo nawet bardziej niż takie rozwiązanie. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 24.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
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:
trzeba kazda dana podpinac osobno, czyli:
powyzsze zapytanie nie sprawdzalo sie jezeli jrawedzie sciezka zawierala powtarzajace sie krawedzie Sprawdza sie zaytanie tego typu:
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:
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?? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 08:45 |