Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] ORDER BY RAND
Forum PHP.pl > Forum > Przedszkole
Hpsi
Witam, jak wszyscy wiedza order by rand() jest złe, ssie etc smile.gif

Ale mam pewien problem z prostym zapytaniem gdyz musze je zoptymalizować a przez warunek where cos like %cos% mi pomysly sie konczą.

Zapytanko:
  1. SELECT title,description,url FROM cncat_main WHERE description LIKE '%meble%' ORDER BY rand() LIMIT 10

Pierwszą moją myślą było zeby zliczyć max id i wylosowac 50 cyfr dodać je w warunku where id in ( liczby) lecz to nie zdaje egzaminu przez warunek WHERE descriotion like %meble% ...
Ma ktoś jakiś pomysł jak to rozwiązać optymalnie w miare (tabela ma ponad 30k rekrdów ... )
peter13135
nie wiem czy będzie bardziej optymalnie, ale jakiś pomysł mam wink.gif

  1. SELECT id FROM cncat_main WHERE description LIKE '%meble%'

wszystkie idki dajesz do tablicy $idki.
  1. $nowe_idki = array_rand($idki, 10);


edit://
potem (pseudokod) :
  1. SELECT * FROM cncat_main WHERE id IN( implode(',' $nowe_idki) )
thek
Ma to być tylko na poziomie bazy czy nie? Jeśli nie to zrób to w stylu... Zapytanie ale wyciągaj jedynie id i wrzucaj do tablicy, którą potem shuffle'niesz, wyciągniesz x liczb i poślesz już do bazy zapytanie z wybranymi id. Tu zrobiłem dla funkcji mysql_query, ale przerobienie tego na PDO to żaden problem smile.gif
  1. $sql = 'SELECT id FROM cncat_main WHERE description LIKE \'%meble%\'';
  2. $id = array();
  3. $count = 10;
  4. $res = mysql_query( $sql );
  5. if( $res && mysql_num_rows( $res ) > 0 ) {
  6. while( $row = mysql_fetch_assoc($res) ) {
  7. $id[] = $row['id'];
  8. }
  9. shuffle( $id );
  10. $sql = 'SELECT title,description,url FROM cncat_main WHERE id IN ('.implode( ',', array_slice($id, 0, $count) ).')';
  11. //lub to co podał kolega wyżej :)
  12. $sql = 'SELECT title,description,url FROM cncat_main WHERE id IN ('.implode( ',', array_rand($id, $count) ).')';
  13. } else {
  14. echo 'Nie ma rekordów';
  15. }
Oczywiście echo tylko dla przykładu.
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.