Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][mysql] Zastąpiony rand + where
Northulus
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 6.06.2012

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


Witam,

chciałem zastąpić nieszczęsne order by rand() na cos bardziej optymalnego.
Poczytałem i taką linię:
  1. $query2="SELECT tytul, tresc FROM artykuly WHERE kategoria='$kat' order by rand() limit 1";


zastąpilem taką:
  1. $query2="SELECT id,tytul,tresc FROM artykuly JOIN (SELECT CEIL(RAND() * (SELECT MAX(id) FROM artykuly)) AS id) AS rows USING (id) WHERE category='$kat'";


Niestety, nie zwraca wyniku.
Gdy usunę "WHERE category='$kat'", wowczas zadziała.

Pomóżcie smile.gif
Go to the top of the page
+Quote Post
Damonsson
post
Post #2





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Przetestuj sobie tego RANDa na dużych ilościach danych bo to, że jest wolny, już chyba nie jest aktualne.
Go to the top of the page
+Quote Post
Northulus
post
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 6.06.2012

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


Hm, tabela ma 67 643 rekordow i 1,5 GB. Gdy uruchamiam ten skrypt to baza się 'zatyka'.
Nie wiem, nie znam się, może to bardzo mała baza - tak czy inaczej, chciałem zastąpić rand'a smile.gif
Go to the top of the page
+Quote Post
RafalT
post
Post #4





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 18.06.2013

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


może wylosowany rekord nie spełnia warunku WHERE category='$kat

spróbuj tak
zapytaniem:
  1. SELECT count(1) FROM artykuly WHERE kategoria='$kat'

pobieramy ilość rekordów $rowNum
następnie:
  1. $offset = rand(0, $rowNum-1);
  2. $query = "SELECT * FROM artykuly WHERE kategoria='$kat' LIMIT $offset, 1";

Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. (SELECT MAX(id) FROM artykuly))

A kto powiedział , że identyfikatory muszą ciągłe?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
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 - 16:33