Witam

Problem jest nastepujacy. Chce wystiwtlic 4 elementy z bazy danych, jeden najbardziej popularny (na podstawie pola np. licznik), jeden najnowszy, jeden wybrany i jeden losowy. Warunki sa takie ze elementy nie moga sie powtorzyc (wybrany nie moze byc losowym, najnowszym itp.), kolejny warunek to takie ze elementy te musza miec dzieci ..uwaga.. w innej tabeli.

W tabeli 1 mam informacje o kanalach (p key ch_id). W drugiej sa informacje o itemach, i tutaj kluczem obcym jest ch_id z tabeli 1.

Oto kod ktorym probuje top zrealizowac.

  1. <?php
  2. $selections->query("SELECT * FROM channels WHERE ch_id != '$featured_id' AND ch_public = 1 ORDER BY ch_ranking desc ");
  3. $result = $selections->result;
  4. while($popularArray = mysql_fetch_assoc($result)) {
  5. $selections->query("SELECT item_id FROM casts WHERE ch_id = '$popularArray[ch_id]'");
  6. if(mysql_num_rows($selections->result) != 0) break;
  7. } 
  8. if($popularArray['ch_img_link'] == "") 
  9. $popular_img = "/images/missing_image.jpg";
  10. else 
  11. $popular_img = substr($popularArray['ch_img_link'], 17);
  12.  
  13. $selections->query("SELECT username FROM users WHERE user_id = '$popularArray[user_id]'");
  14. $popular_user = mysql_fetch_assoc($selections->result);
  15. $popular_user = $popular_user['username'];
  16. ?>


Tego typu blokow mam 4. Roznia sie pierwszym zapytaniem do bazy danych, gdzi estawiam warunki jakie ch_id jest niedopuszczone. Biorac pod uwage ze najpierw wybieram wybrany kanal, pozniej najbardziej popularny (nie moze byc taki sam jak wybrany), pozniej najnowszy (nie moze byc taki jak popularny czy wybrany). Stad roznica zapytan.

Jak widac sprawdzanie czy kanal ma dzieci (itemy) znajduje sie w petli while. Jesli nie ma sprawdzam jeszcze raz. I tutaj jest problem poniewaz skrypt nie radzi sobie z ta petla. Objawy sa dwa, albo HTTP 500 Internal Error/Missconfiguration (czy jakos tak smile.gif), albo Fatal error mowiacy o tym ze czas 60 sec sie skonczyl.

Jestem pewien ze problemem jest tutaj fakt ze zapytania sa petlone. Kiedy obejme petle komentarzem wszystko jest w pozadku.

Jak moge ominac ta sytuacje ?