Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [sql]ORDER BY RAND
Forum PHP.pl > Forum > Przedszkole
tymos
Mam taki oto kod. Niestety wygenerowanie tego trochę zajmuje i obciąża serwer. Nie mam pomysłu jak to rozwiązać :/
  1. <h2>Links:</h2>
  2. <ul>
  3. <?php
  4. include('wp-config.php');
  5. mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
  6. mysql_select_db(DB_NAME);
  7. $sql="Select * from `".$table_prefix."posts` ORDER BY RAND() LIMIT 25";
  8. $zapytanie=mysql_query($sql);
  9. while ($row = mysql_fetch_array($zapytanie)){
  10.  
  11.  
  12. $show= '<a href="'.$row['guid'].'">'.$row['post_title'].'</a><br>';
  13. echo $show;
  14. }
  15. ?>
  16. </ul>
kris2
w kazdym artykule o wydajnosci jest napisane zeby nie uzywac order by rand() poniewaz on musi obliczyc random dla kazdej krotki w bazie danych.
pomysly ktore przychodza mi do glowy:

załóż kolumne random , zaindeksowana. wgraj do niej losowe dane i rob select z order by po tej kolumnie.
i teraz możesz albo regenerować wartośc random po każdym jej odczytaniu
albo raz na jakis czas zapuszczac zapytanie generujace wszystkie randomy od nowa

to świetnie zadziała przy dużej ilości danych i małej ilości selectów

Drugi pomysł

załóż tabele zawierajaca dwie dane
id i wygenerowany random np:

1 235
2 632
3 345

id musi byc tyle ile masz w twojej tablicy.

i za kazdym losuj ide ktore wybierzesz na zasadzie

SELECT id from table WHERE random>rand() limit 25;

np zeby to dzialalo sprawnie polacz ten select jako JOIN z twoim zapytaniem.
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.