Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyszukiwanie/Zamienianie danych, strasznie muli albo wcale nie działa :)
Rafiki
post 18.11.2011, 20:03:50
Post #1





Grupa: Zarejestrowani
Postów: 90
Pomógł: 0
Dołączył: 29.12.2005
Skąd: Z krzaków

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


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



Ten post edytował Rafiki 18.11.2011, 22:07:03
Go to the top of the page
+Quote Post
wujek2009
post 20.11.2011, 11:45:49
Post #2





Grupa: Zarejestrowani
Postów: 350
Pomógł: 31
Dołączył: 23.05.2010

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


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.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 26.06.2025 - 23:42