Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Optymalizacja zapytania
MalyKazio
post
Post #1





Grupa: Zarejestrowani
Postów: 168
Pomógł: 1
Dołączył: 19.11.2005

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


Witam,

Mam pewien problem z banalnym zapytaniem. Calosc wyglada tak:

SELECT * FROM psy ORDER BY rand() LIMIT 1;

Niestety dla wyswietlenia tego jednego rekordu pobiera mi wszystkie wiersze z bazy danych. Czy da sie cos zrobic alby ograniczyc ilosc pobieranych wierszy? Nie bez znaczenia jest tych 1000 niepotrzebnych wierszy....
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
MalyKazio
post
Post #2





Grupa: Zarejestrowani
Postów: 168
Pomógł: 1
Dołączył: 19.11.2005

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


Zgadza się, chodzi o to że mieli całą tabelę a ostatnio home.pl wziął się za sprawdzanie wykorzystania bazy i zwrócili mi uwagę, że z 1000 pobieranych rekordow tylko jeden jest potrzebny w związku z czym przydałoby się to poprawić. Wymyśliłem rozwiązanie wyjątkowo nieeleganckie ale na lepsze nie wpadłem. Teraz zamiast jednego zapytania mam 3 ale trudno...

  1. <?php
  2. $query = "SELECT MAX(nr) as numer FROM psy WHERE edycja = 0";
  3. $wynik = mysql_query($query);
  4. while ($row = mysql_fetch_assoc($wynik)) {
  5. $maxnumer=$row[numer];
  6. }
  7.  
  8. $liczba=rand(1, $maxnumer);
  9.  
  10. $query = "SELECT * FROM psy WHERE nr=$liczba";
  11. $wynik = mysql_query($query);
  12. $znaleziono = mysql_num_rows($wynik);
  13. if($znaleziono==0) {
  14. $liczba=rand(1, $maxnumer);
  15. $query = "SELECT * FROM psy WHERE nr=$liczba";
  16. $wynik = mysql_query($query);
  17. $znaleziono = mysql_num_rows($wynik);
  18. if($znaleziono==0) {
  19. $query = "SELECT * FROM psy WHERE nr=1";
  20. $wynik = mysql_query($query);
  21. }
  22. }
  23.  
  24. while ($row = mysql_fetch_assoc($wynik)) {
  25. ?>


Działa choć kod jest obrzydliwy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Ponowne losowanie wybrałem dlatego, że dość często wybierało mi 1 rekord.

Kolejne pytanie. Czy warto zmienić typ pola z TEXT na VARCHAR jesli przechowywane są tam dane nie dłuższe niż 255 znaków?
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: 18.10.2025 - 08:49