Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [sql]ORDER BY RAND, zawolne :/
-tymos-
post
Post #1





Goście







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>
Go to the top of the page
+Quote Post
kris2
post
Post #2





Grupa: Zarejestrowani
Postów: 150
Pomógł: 3
Dołączył: 15.08.2007

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


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.

Ten post edytował kris2 22.09.2007, 18:23:40
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 Aktualny czas: 20.08.2025 - 15:36