Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwanie/Zamienianie danych
Forum PHP.pl > Forum > Bazy danych > MySQL
Rafiki
Posiadam baze z tabela ktora ma okolo 20 tysiącami rekordów ( niecałe 20 mb ).
Struktura tabeli ma 6 kolumn ( id, tytul, wersja, rozmiar, licencja, jezyk )

w kilku tysiącach wpisów, pomylone sa wartosci ...a dokladniej pozamieniane kolejnosci.
np, prawidlowy wpis powinien wygladac tak:
ID | TYTUL | WERSJA | ROZMIAR | LICENCJA | JEZYK
1 | tytul | 1.1 | 0.0 MB | free | PL

a niektóre wpisy wygladaja np:
ID | TYTUL | WERSJA | ROZMIAR | LICENCJA | JEZYK
1 | tytul | free | PL | 1.1| 0.0 MB

albo jeszcze inaczej pola sa poprzestawianie (zupelnie losowo grupami, nie wiem z czego to wyniklem) .

Chciałem napisac skrypt w phpie ktory wyswietli pierw wszystkie bledne wpisy a pozniej jakos bede je edytowal...
Zauwazylem ze wszystkie bledne wpisy maja w tytule tekst 'pl'
Wiec stworzylem petle z zapytaniem SELECT .... LIKE '%pl%'

Kod
    
while ($rekord = mysql_fetch_assoc(mysql_query("SELECT * FROM prog WHERE tytul LIKE '%pl%'"))) {
        echo $rekord['tytul'] . ' - ' .  $rekord['wersja'] . ' - ' .  $rekord['rozmiar'];
}


niestety wyswietlanie tego trwa w nieskonczonosc... skrypt na localhoscie na apachu muli i muli... po ponad 15 minutach wyswietlilo kilka wpisow...

Odpaliłem z ciekawosci tez phpmyadmin... skorzystalem w tabeli z opcji szukaj... wpisalem %pl% i w ciagu 0,2 sek znalazlo wszystkie wpisy... jak to możlie ?
Co robie źle albo może jak w ogóle powinienem się do tego zabrać ? Probowalem ustawic LIMIT co niestety nic nie daje (myslalem ze ograniczenie wynikow pomoze ). Natomiast PHPMyAdmin wyswietla nawet naraz wszystkie kilka tysiecy wpisow z like %pl% po odpowiedzi serwera w przeciagu niecalej sekundy i jedynie lekkiej zawieszce przegladarki na kilka sek wink.gif

Z góry dzieki za wszelkie porady i pomoc wink.gif

wujek2009
sprawdź czy na pewno mysql_error() nic nie zwrócił - ogólnie to zapisał bym to w ten sposób;
  1. if ( ! $q = mysql_query("SELECT * FROM prog WHERE tytul LIKE '%pl%'") )
  2.  
  3. while ( $rekord = mysql_fetch_assoc($q) )
  4. // dalsza część


Ogólnie miałbym wątpliwości co do Twojego zapisu - jeśli chodzi o kolejność najpierw mysql_query -> mysql_fetch_assoc.
Poza tym nie dawałbym tego bezpośrednio w pętli - bo jestem pewien, że to właśnie zły zapis while generuje jakiś loop i cały czas muli Ci. W tej chwili wydaje mi się, że w ogólnym wyniku tak wygląda Twój kod:
  1. while (true)
  2. {
  3. // i mamy pętle nieskończoną, co powoduje tak długi czas generowania
  4. }


no i oczywiście nie debugujesz zapytania (mysql_error()) - sprawdź ten kod co ja podałem.

pozdro.
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.