posiadam w bazie danych tebele o nazwie global w ktorej przechowywane sa informacje na temat ksiazek, znajduje sie tam kilka tysiecy pozycji.
tabela ta ma taka oto strukture:
tabela global:
| id | tytul | id_autor | id_category | .......... i pozostale pola
tabela autor:
| id | autor |
tabela category:
| id | category |
normalne jest ze w tej tabeli moze znajdowac sie wiecej niz jedna pozycja tego samego autora (ten sam autor kilka innych tytulow) oraz to ze znajduja sie wiecej niz jedna kategoria np. horror, przygoda
np:
autor_1 | tytul_10 | category_1
autor_1 | tytul_11 | category_1
autor_1 | tytul_12 | category_1
autor_1 | tytul_13 | category_1
autor_1 | tytul_14 | category_1
autor_2 | tytul_21 | category_2
autor_2 | tytul_22 | category_2
autor_3 | tytul_31 | category_2
autor_3 | tytul_32 | category_2
autor_4 | tytul_41 | category_1
autor_4 | tytul_42 | category_1
autor_5 | tytul_51 | category_3
autor_5 | tytul_52 | category_3
szukam rozwiazania aby wypisac wszystkich autorow pisszacych w tej samej kategorii tematycznej:
tzn klikajac na link: category_1
otrzymalbym cos takiego:
KATEGORIA: category_1
liczba autorow w tej kategorii: 2
liczba ksiazek w tej kategorii: 7
oraz liste autorow:
autor_1 (5)
autor_4 (2)
napisalem skrypt ktory realizuje to zadanie ale wysypuje sie gdy w danej kategorii jest duza liczba autorow: np kategoria science-fiction gdzie jest samych autorow 2tys kazdy autor napisz chodzby dwie ksiazki to juz jest 4tys pozycji:
skrypt nie radzi sobie z czasem wykonania (chyba) dostaje taki oto komunikat:
Fatal error: Maximum execution time of 30 seconds exceeded in search.php on line ...
oto skrypt:
<?php //zmienna $_GET['category'] wchodzi do skryptu informujac o ktora kategorie chodzi $zapytanie = "SELECT * FROM category WHERE id='".$_GET['category']."'"; $kategoria=$wiersz['category']; //w powyzszym zapytaniu pobieram nazwe kategorii $zapytanie = "SELECT * FROM global WHERE id_category='".$_GET['category']."'"; $i=0; { $wejscie[]=$wiersz['id_autor']; $i++; } //w powyzszym zapytaniu laduje wszystkich autorow piszacych w jednej kategorii to
tablicy $wejscie[] //moze zdazyc sie tak ze jeden autor napisal wiecej niz jedna ksiazke w tej samej
kategorii //dlatego z tablicy $wejscie trzeba usunac powtarzajacych sie autorow $ile_akt=0; $suma_poz=0; //powyzsze zmienne beda odpowiedzialne za wyswietlenie szczegolow o kategorii //$ile_akt - ile autorow jest w danej kategorii //$suma_poz - ile jest ksiazek nalezaczych do jednej kategorii //czesc realizujaca glowne zadanie skryptu foreach ($wynik as $klucz => $wartosc) { $zapytanie = "SELECT * FROM authors WHERE id='".$wartosc."'"; $autor=$wiersz['autor']; //w powyzszym zapytaniu pobieram nazwe pierwszego autora z zadanej kategorii //w tym zapytaniu pbieram liczbe tytulow ksiazek nalezacych do zadanej kategorii i
napisanych przez danego autora $zapytanie = "SELECT * FROM global WHERE id_autor='".$wartosc."' and id_category='".$_GET['category']."'"; $i=0; { $i++; } $suma_poz=$suma_poz+$i; echo"<tr><td><a class=menu_link href=details.php?id=".$wartosc."&cat=".$_GET['category'].">".$autor." (".$i.")</a></td></tr>"; $ile_akt++; } // a tutaj wypisuje szczegoly na temat danej zadanej kategorii echo"<div> <span>Category: ".$kategoria."</span></br> <span>Total authors in this category: ".$ile_akt."</span></br> <span>Total books in this category: ".$suma_poz."</span> </div>"; ?>
wg powyzszego przykladu blad ten mi sie pojawia
w lini 40 i 47
Fatal error: Maximum execution time of 30 seconds exceeded in search.php on line 40
lub
Fatal error: Maximum execution time of 30 seconds exceeded in search.php on line 47
czy moze mi ktos pomoc nie wiem o co chodzi
czy tern skrypt dziala w nieskonczonosc?,
petla nigdy sie nie konczy?
czy jeszcze cos innego
ja nie mam juz pomyslow
a moze ktos mi podsunie inny sposob rozwiazania tego problemu
pozdrawiam
ps. wiem ze ta tabel nie ma jeszcze nic wspolnego z postacia normalna ale teraz nie ma to najmniejzszego znaczenia