[PHP][MySQL] kody CPV, jak stworzyć strukturę drzewa |
[PHP][MySQL] kody CPV, jak stworzyć strukturę drzewa |
29.06.2020, 13:55:13
Post
#1
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 1.03.2011 Ostrzeżenie: (0%) |
Cześć,
czy ktoś kiedyś spotkał się z problemem generowania i poruszania się po zagnieżdżonym drzewie kodów CPV? Kody CPV (Wspólny Słownik Zamówień) to taka ogólnie stosowana lista branż. Kody CPV są tutaj: https://kody.uzp.gov.pl/ CPV->widok drzewiasty Jak wyświetlić takie drzewo mając tylko listę kodów CPV w bazie MySQL, którego postać określa zagnieżdżenie tak, że: - dwie pierwsze cyfry określają działy: XX000000-Y, - trzy pierwsze cyfry określają grupy: XXX00000-Y, - cztery pierwsze cyfry określają klasy: XXXX0000-Y, - pięć pierwszych cyfr określa kategorie: XXXXX000-Y. Próbuje to ogarnąć, ale ilość zapętleń i zapytań do bazy danych (przy tworzeniu tablicy z zagnieżdzonymi kodami) jest tak dużo, że skrypt zamula ekstremalnie. Jak podejść do tematu? Nie chodzi mi o gotowe rozwiązanie ale o pomysł, może istnieją jakieś algorytmy do obsługi tego sposoby prezentowania danych? Ten post edytował sieradz 29.06.2020, 13:56:06 |
|
|
29.06.2020, 14:34:45
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 447 Pomógł: 6292 Dołączył: 27.12.2004 |
Ile w sumie jest wszystkich kodow?
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
29.06.2020, 14:36:20
Post
#3
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 1.03.2011 Ostrzeżenie: (0%) |
|
|
|
29.06.2020, 14:38:10
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 447 Pomógł: 6292 Dołączył: 27.12.2004 |
No to teraz pytanie jak chcesz generowac to drzewo. Czy cale od razu czy ajaxem dociagac dane w miare rozwijania.
Jak cale od razu, to wczytaj normalnie do php wszystkie kody a potem w php sobie przygotuj strukture drzewiasta. Jak doczytywac AJAXem to juz w ogole zadna filizofia -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
29.06.2020, 14:47:06
Post
#5
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 1.03.2011 Ostrzeżenie: (0%) |
No to teraz pytanie jak chcesz generowac to drzewo. Czy cale od razu czy ajaxem dociagac dane w miare rozwijania. Jak cale od razu, to wczytaj normalnie do php wszystkie kody a potem w php sobie przygotuj strukture drzewiasta. Jak doczytywac AJAXem to juz w ogole zadna filizofia problem mam właśnie z przygotowaniem struktury drzewiastej. Na różne sposoby kombinuje i im więcej zagnieżdżeń tym bardziej muli. |
|
|
29.06.2020, 15:25:11
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 447 Pomógł: 6292 Dołączył: 27.12.2004 |
No ci przeciez napisalem: nie masz robic tysiaca zapytan do bazy, tylko jednym zapytaniem pobrac wszystkie kody i w php ladnie to przerobic. JEDNO zapytanie do bazy PO WSZYSTKO
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
2.07.2020, 14:14:17
Post
#7
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 1.03.2011 Ostrzeżenie: (0%) |
No ci przeciez napisalem: nie masz robic tysiaca zapytan do bazy, tylko jednym zapytaniem pobrac wszystkie kody i w php ladnie to przerobic. JEDNO zapytanie do bazy PO WSZYSTKO
Napisałem taki kod tworzący tablicę o strukturze drzewa. Podaje się array, który ma w sobie wszystkie rekordy pobrane z bazy mysql oraz kod cpv który ma być rodzicem. Przy CPV który jest najbardziej ogólny trochę zamula. Mógłbym prosić o sugestię jak przyśpieszyć ten skrypt? Ten post edytował sieradz 2.07.2020, 14:14:49 |
|
|
2.07.2020, 14:24:55
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 447 Pomógł: 6292 Dołączył: 27.12.2004 |
Co to robi
$this->array_column($array, 'cpv') ? Czemu nie phpopwe array_column i czemu w ogole przekazujesz wielowymiarowa tablice? Czemu nie plaska tablice z samymi kodami pcv. Z tego co widze to tutaj do wyliczen nic wiecej ci nie jest potrzebne. A teraz odpalasz bez sensu array_column tyle razy ile masz rekordow. Masz 9tys rekordow to odpalasz to 9tysiecy razy... Rowniez pattern sprawdzasz za kazdym razem na calej tablicy. A po co masz sprawdzac cos co juz dawno zostalo uzyte? Tylko generujesz pelna mase niepotrzebnych sprawdzan -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
2.07.2020, 14:34:55
Post
#9
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 1.03.2011 Ostrzeżenie: (0%) |
mam starą wersję PHP więc dodałem taki zamiennik tej funkcji:
Przeszukuje tym wielowymiarowe tablice, zeby znalezc miejsce gdzie umiescic kolejne głębsze tablice . A jak zrobić płaską tablice i operować na zagłębieniach: wyświetlać wszystkie, tylko dzieci itd? Można bez tablic wielowymiarowych? Na początku pytałem się o jakiś pomysł na algorytm. |
|
|
2.07.2020, 14:51:12
Post
#10
|
|
Grupa: Moderatorzy Postów: 36 447 Pomógł: 6292 Dołączył: 27.12.2004 |
Wez odpal ten $this->array_column tylko raz przed wszystkim i do funkcji przekazuj cale $array oraz splaszczone $array - chodzi o to bys nie odpalal 9tys razy tej koszmarnej funkcji. Bez sensu robota Oraz nie generuj bez sensu bledow $trees[$k][title] = $array[$k][PL]; zamien na $trees[$k]['title'] = $array[$k]['PL']; Analogicznie reszta. I az boje sie zapytac: na jakiej w takim razie wersji php teraz pracujesz? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
2.07.2020, 15:10:46
Post
#11
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 1.03.2011 Ostrzeżenie: (0%) |
Wez odpal ten $this->array_column tylko raz przed wszystkim i do funkcji przekazuj cale $array oraz splaszczone $array - chodzi o to bys nie odpalal 9tys razy tej koszmarnej funkcji. Bez sensu robota Oraz nie generuj bez sensu bledow $trees[$k][title] = $array[$k][PL]; zamien na $trees[$k]['title'] = $array[$k]['PL']; Analogicznie reszta. I az boje sie zapytac: na jakiej w takim razie wersji php teraz pracujesz? zmieniłem według sugestii i faktycznie znacznie przyśpieszyło, dzięki. Wersja php 5.2 Ten post edytował sieradz 2.07.2020, 15:11:51 |
|
|
2.07.2020, 15:11:59
Post
#12
|
|
Grupa: Moderatorzy Postów: 36 447 Pomógł: 6292 Dołączył: 27.12.2004 |
I jeszcze by przyspieszylo jakbys preg_grep lecial tylko po nie uzytych jeszcze elementach a nie po wszystkich jak teraz. Bo zakladam ze tego jeszcze nie poprawiles
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
2.07.2020, 15:23:54
Post
#13
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 1.03.2011 Ostrzeżenie: (0%) |
I jeszcze by przyspieszylo jakbys preg_grep lecial tylko po nie uzytych jeszcze elementach a nie po wszystkich jak teraz. Bo zakladam ze tego jeszcze nie poprawiles dodałem unset($array_flat[$k]);
|
|
|
2.07.2020, 15:28:58
Post
#14
|
|
Grupa: Moderatorzy Postów: 36 447 Pomógł: 6292 Dołączył: 27.12.2004 |
Tablica to nie obiekt. Robiac zmiany w tablicy w funkcji, zmiany nie sa widoczne poza funkcja a co z kolei za bardzo nic nie poprawia w tym co masz. Musisz przekazac te tablice jako referencja
public function list_subcpv_array($array, $cpv, &$array_flat){ -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
2.07.2020, 15:36:10
Post
#15
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 1.03.2011 Ostrzeżenie: (0%) |
Tablica to nie obiekt. Robiac zmiany w tablicy w funkcji, zmiany nie sa widoczne poza funkcja a co z kolei za bardzo nic nie poprawia w tym co masz. Musisz przekazac te tablice jako referencja public function list_subcpv_array($array, $cpv, &$array_flat){ cenna rada, dzięki |
|
|
Wersja Lo-Fi | Aktualny czas: 20.04.2024 - 04:12 |