Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Podkręcanie GROUP_CONCAT
TomASS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Witam serdecznie.

Mam w bazie danych realację jeden do wielu. Mam tabelę transporty oraz miejsca. Do jednego transportu może być przypisanych kilka miejsc.

Aby całość trasy (wszystkie miejsca danego transportu) wyciąnąć w zapytaniu daję GROUP CONCAT:

  1. SELECT T.*, (SELECT GROUP_CONCAT(DISTINCT M.Miejscowosc ORDER BY Rodzaj DESC SEPARATOR '-') FROM m_miejsca AS M WHERE M.ID_transport=T.ID_t AND M.Miejsce!='del') FROM m_transporty AS T;


Niestety daje mi to czas 8 sekund dla 100 rekordow. Po usunieciu GROUP_CONCAT daje mi czas 0,03s.
Co próbowałem:
1. Uproszczenie GROUP_CONCAT: (SELECT GROUP_CONCAT(M.Miejscowosc SEPARATOR '-') FROM m_miejsca AS M WHERE M.ID_transport=T.ID_t ) - nic nie daje (minimalne przyspieszenie - 1,5%)
2. Przeniesienie funkcjonalności do "STORED FUNCTION" - także nic


Czy ktoś ma jakiś pomysł?


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mmmmmmm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


spróbuj tak:
  1. SELECT DISTINCT
  2. T.Numer,
  3. T.Numer_zleceniodawcy,
  4. Zlecniodawca.Nazwa,
  5. T.ID_przewoznik,
  6. Przewoznik.Nazwa,
  7. 1,
  8. Odleglosc,
  9. ROUND(T.Cena_jednostkowa_netto_od_sprzedawcy * T.Ilosc,
  10. 2),
  11. T.Waluta_zlecenia,
  12. ROUND(T.Cena_netto_dla_przewoznika, 2),
  13. T.Waluta_dla_przewoznika,
  14. T.Towar,
  15. CONCAT_WS(' ', Kierowca.Nazwisko, Kierowca.Imie),
  16. Kierowca_spedycja,
  17. Ciezarowka.Numer_ciagnika,
  18. Ciezarowka_spedycja,
  19. Faktura.Numer,
  20. DATE(T.Data_realizacjiPoczatek),
  21. DATE(T.Data_realizacjiKoniec),
  22. Rodzaj_transportu,
  23. T.ID_t,
  24. Oddzial.Nazwa,
  25. ' ',
  26. NumerFakturyOdPrzewoznika,
  27. T.FakturaObca,
  28. x.group_miejscowosc
  29. FROM
  30. m_transporty AS T
  31. LEFT JOIN
  32. m_kontrahenci AS Zlecniodawca ON (Zlecniodawca.ID_k = T.ID_platnik)
  33. LEFT JOIN
  34. m_kontrahenci AS Przewoznik ON (Przewoznik.ID_k = T.ID_przewoznik)
  35. LEFT JOIN
  36. m_kierowcy AS Kierowca ON (Kierowca.ID_k = T.ID_kierowca)
  37. LEFT JOIN
  38. m_ciezarowki AS Ciezarowka ON (Ciezarowka.ID_c = T.ID_ciezarowka)
  39. LEFT JOIN
  40. f_faktury AS Faktura ON (Faktura.ID_f = T.ID_faktura)
  41. LEFT JOIN
  42. m_oddzialy AS Oddzial ON (Oddzial.ID_o = T.ID_oddzial)
  43. LEFT JOIN
  44. (SELECT
  45. ID_Transport,
  46. GROUP_CONCAT(M.Miejscowosc
  47. ORDER BY Rodzaj DESC
  48. SEPARATOR '-') group_miejscowosc
  49. FROM
  50. m_miejsca AS M
  51. WHERE
  52. M.Miejsce != 'del'
  53. GROUP BY ID_Transport) x ON (x.ID_Transport = T.ID_t)
  54. WHERE
  55. T.Miejsce != 'del'
  56. AND WEEK(T.Data_realizacjiPoczatek) = 2
  57. AND YEAR(T.Data_realizacjiPoczatek) = 2013
  58. ORDER BY
  59. T.Numer ASC
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 07:05