Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skomplikowane zapytanie MySQL, Wyświetlanie tekstów z kilku poziomów podkategorii
armata12
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 18.12.2004

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


Witam, robię serwis z poradami.
Mam 4 poziomy kategorii i potrzebuje aby po kliknięciu w kategorię nr 1(najwyższego rzędu) wyświetliły mi się porady z wszystkich podkategorii włącznie z poziomem 4. Wspomnę, iż porady mogą być zapisywane w kategoriach rzędu 2,3 i 4. Przy czym czasami są tylko 2 poziomy.

Tabela kategorii:
id|cat_id|title

Tabela porad:
id|cat_id|user_id|title|.......

  1. SELECT DISTINCT a.id, a.user_id, a.photo, a.title, a.date, a.views, u.username
  2. FROM `advices` AS a, `users` AS u , `categories` AS c1, `categories` AS c2, `categories` AS c3
  3. WHERE ((c1.`cat_id`='$cat' AND c1.`id`=a.`cat_id`) OR
  4. (c1.`cat_id`='$cat' AND c1.`id`=c2.`cat_id` AND c2.`id`=a.`cat_id`) OR
  5. (c1.`cat_id`='$cat' AND c1.`id`=c2.`cat_id` AND c2.`id`=c3.`cat_id` AND c3.`id`=a.`cat_id`)) AND a.`user_id`=u.`id`


Powyższe zapytanie długo się wykonuje i pewnie im więcej będzie porad będzie co raz gorzej.
Proszę o pomoc z zoptymalizowaniu zapytania.

Będę wdzięczny za pomoc. Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
armata12
post
Post #2





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 18.12.2004

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


Dzięki bardzo, pomogłeś mi. Zrobiłem to ciut inaczej ale też na tablicach. W strukturalnym mniej więcej tak:

  1. $cat_id = intval($_GET['cat']);
  2. $cats = array($cat_id);
  3.  
  4. $number_subcats = count($subcats[$cat_id]);
  5. for($i = 0; $i < $number_subcats; $i++)
  6. {
  7. $cats[] = $subcats[$cat_id][$i]['id'];
  8.  
  9. $cat_id2 = $subcats[$cat_id][$i]['id'];
  10. $number_subcats2 = count($subcats[$cat_id2]);
  11. for($i2 = 0; $i2 < $number_subcats2; $i2++)
  12. {
  13. $cats[] = $subcats[$cat_id2][$i2]['id'];
  14. }
  15. }
  16. $cat = " WHERE a.`cat_id` IN (".implode(',', $cats).") ";
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 8.10.2025 - 09:58