Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Predkosc zwracania wartosci
Forum PHP.pl > Forum > Przedszkole
Koldy
Czesc, witam, to znow ja.

Tym razem, czysto informacyjnie chcialbym sie dowiedziec czy lepiej jest sciagnac powiedzmy 100 rekordow do tablicy i sortowac je tam do wyswietlania, czy aby lepiej jest wykonac dwa zapytania do mysql, gdzie zwroci juz dwa razy gotowe wyniki.

Pozdrawiam
nospor
A czemu nie mozesz posortowac wynikow juz zapytaniu? W jednym zapytaniu?
Koldy
dobra, siedze juz dobre poltorej godziny i probuje osiagnac cos takiego:
  1. array ( pierwszy_poziom => arMenu,
  2. drugi_poziom => arMenu,
  3. trzeci_poziom => arMenu)


zeby pobrac jedno menu wykonuje zapytanie
  1. SELECT * FROM `pages` WHERE `page_parent_id` = `0` AND `page_is_adm` = `0` ORDER BY `page_order` = 0, `page_order`


poki co tabela wyglada tak:
Kod
page_id     page_name     page_title     page_filename     page_order     page_parent_id     page_is_adm     page_is_parent


probuje probuje i nic mi nie wychodzi, kombinuje z groupby, ale juz sam nie wiem jak sie do tego zabrac, czy ktos moglby mnie naprowadzic?
ZaXaZ
mozesz napisac dokladniej co chcesz osiagnac? bo dane podane sie roznia z tablica ktora chcesz osiagnac.
Koldy
Tabela to Strony na stronie, wiec one takze tworza menu

pierwszy poziom gdzie parent_id = 0
kolejny poziom gdzie parent_id = id_menu_rodzica
ETC.

Ostatnie mysli mam, zeby pobrac wszystkie strony i przeleciec je petla for i posprawdzac ktore sa kogo i je posortowac, bo nie mam pojecia jak to zrobic za pomoca sql

OK, doszedlem do takiego rozwiazania:

Dane SUBmenu, oraz dane TABS wczytuja sie dopiero po sprawdzeniu czy element ma dzieci, takze na 3 poziomowe menu wykonuja sie 3 zapytania, sek w tym ze czwartego poziomu nie bedzie i rozmyslalem nad 3 tabelami Menu, Submenu, Tabs. Poki co to dziala, ale mnie nie satysfakcjonuje jeszcze. Dzieci wczytywane sa tylko aktywnego elementu, gdyz tylko takie dane mi trzeba.

  1. $this->_arMenuItems = $this->_getMenuItems();
  2.  
  3. #PAGE
  4. if(!empty(PM_ACTIVE_PAGE)) {
  5. foreach ($this->_arMenuItems as $index => $arMenuSingle) {
  6.  
  7. if (PM_ACTIVE_PAGE == $arMenuSingle['page_filename']) {
  8. $this->_iActiveItemIndex = $index;
  9.  
  10. if ($arMenuSingle['page_is_parent'] == 1) {
  11. $this->_arSubMenuItems = $this->_getMenuItems($arMenuSingle['page_id']);
  12.  
  13. #SUB
  14. if(!empty(PM_ACTIVE_SUB)) {
  15. foreach ($this->_arSubMenuItems as $index => $arMenuSingle) {
  16.  
  17. if (PM_ACTIVE_SUB == $arMenuSingle['page_filename']) {
  18. $this->_iActiveItemIndex = $index;
  19.  
  20. if ($arMenuSingle['page_is_parent'] == 1) {
  21. $this->_arTabsItems = $this->_getMenuItems($arMenuSingle['page_id']);
  22.  
  23. #TAB
  24. if(!empty(PM_ACTIVE_TAB)) {
  25. foreach ($this->_arTabsItems as $index => $arMenuSingle) {
  26.  
  27. if (PM_ACTIVE_TAB == $arMenuSingle['page_filename']) {
  28. $this->_iActiveItemIndex = $index;
  29. } else {
  30. $this->_iActiveSubItemIndex = 0;
  31. }
  32. }
  33. }
  34. }
  35. } else {
  36. $this->_iActiveSubItemIndex = 0;
  37. }
  38. }
  39. }
  40. }
  41. } else {
  42. $this->_iActiveItemIndex = 0;
  43. }
  44. }
  45. }


Nie wiem jak to rozwiazac najlepiej..
nospor
Czytam i czytam i ciągle za bardzo nie wiem co probujesz zrobic.

Nie mniej jednak, skoro to jest struktura drzewiasta, to dobrze by bylo, byś się zainteresował strukturami drzewiastymi dla baz -jak je projektowac poprawnie - np. drzewka IP
Będzie ci później łatwiej to wszystko ogarnąć
Koldy
No wlasnie myslalem zeby zrobic tutaj drzewo, w sensie metode rekurencji, ale doszedlem do wniosku, ze tak na prawde te elementy sa stale.

pierwszy poziom to Menu (belka na gorze ekranu)
drugi poziom to SubMenu, z lewej taki box z menu.
trzeci to Tabmenu, czyli tak jakby zakladki na SubMenu.

Nie umiem juz bardziej wyjasnic o co mi chodzi.

Dobra, moj kod ewolulowal do postaci takiej, jest rekurencja, jest wszystko, poziomy nie koncza sie na 3.

  1. protected function _loadMenu($index = 0, $parentID = 0) {
  2. $this->_arMenu[$index] = $this->_getMenuItems($parentID);
  3. if(!empty($this->_arMenu[$index])) {
  4.  
  5. foreach ($this->_arMenu[$index] as $itemIndex => $arMenuItem) {
  6. if (isset($this->_arGlobal[$index]) AND $this->_arGlobal[$index] == $arMenuItem['page_filename']) {
  7.  
  8. $this->_arActiveMenuItemIndex[$index] = $itemIndex;
  9.  
  10. if ($arMenuItem['page_is_parent'] == 1) {
  11. $this->_loadMenu($index+1, $arMenuItem['page_id']);
  12. }
  13. } else {
  14. $this->_arActiveMenuItemIndex[$index] = 0;
  15. }
  16. }
  17. }
  18. }


Wiec, zrobic zrobilem, pytanie brzmi czy optymalnie, gdyz wykonuje 3 zapytania, ale wydaje mi sie ze nie da sie inaczej, gdyz zeby pobrac podmenu potrzebuje id rodzica.
Pozdrawiam

Dobra, poczytalem o tych drzewkach IP, skoro okazaly sie szybsze, to dlaczego by ich nie zaimplementowac, wiec i tak zrobilem.
Pozdrawiam Nospor, dziekowka za pomoc.
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.