Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] Losowanie rekordów bez obciażenia serwera
emanuel
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 29.06.2008

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


Tabela MYSQL ma milion rekordów, a może mieć nawet kilkanaście razy więcej.
Potrzebuję wylosować z niej X rekordów i wyświetlić informację zawarta w ich polach
Przykładowo mam takie zapytanie które wykonuje oczekiwane zadanie ale obciąża zasoby serwera.

CODE
<?
$zapytanie_sr = "SELECT pole FROM tabela ORDER BY RAND() LIMIT 20";
$wykonaj_sr = mysql_query($zapytanie_sr);
while($rek_sr = mysql_fetch_array($wykonaj_sr))
{
$tekst_sr=$rek_sr['pole'];

//wyświetlanie wyniku zapytania

echo "<font size=2 face=Arial>";
echo"
<B>$tekst_sr</B>
";
echo "</font><br>";
}

?>


Jak rozwiązać żeby obciążenie było minimalne i nie trzeba było czekać na wyświetlenie wyniku?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
rafalp
post
Post #2





Grupa: Zarejestrowani
Postów: 224
Pomógł: 18
Dołączył: 4.02.2003
Skąd: Częstochowa

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


Moja propozycja:

  1. <?php
  2. $los[0] = rand(1, $ilość_rekordów_w_bazie); // ilość rekordów np. za pomocą COUNT(*)
  3. $los[1] = rand(1, $ilość_rekordów_w_bazie); // lub jeśli więcej to w pętli (for)
  4. ?>


+ zapytanie


  1. SELECT pole FROM tabela WHERE (id=$los[0] OR id=$los[1] OR id=$los[2])
itp

zakładając że masz w tabeli kolumne ID. Następnie jeśli pola ID a autoinkrementacją mogą być usuwane to dać jakiś warunek sprawdzający czy jest wyników tyle ile chcemy jeśli nie do powtórzyć losowanie lub wybrać dodatkowo jeszcze jakieś pole.
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: 7.10.2025 - 11:50