Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: losowe pobieranie jednego z 10 rekordów
Forum PHP.pl > Forum > Bazy danych > MySQL
zdzichu
...w oczekiwaniu na rozwiązanie mojego głównego problemu z sql postanowiłem się wziąć za coś innego.
chciałbym pobrać losowo, jeden z 10 ostatnio dodanych rekordów. w tabeli mam pole created_at - więc na jej podstawie sortuję wpisy ostatnio dodane- po posortowaniu malejącym i ustawieniu limit 10 mam zawsze 10 ostatnich rekordów. jak z tych 10 wybrać jeden losowy rekord?
Pr0100
zamiast

  1. <?php
  2. mysqli_query(/* ...  */'LIMIT 10')
  3. ?>


daj

  1. <?php
  2. mysqli_query(/* ...  */'LIMIT '.rand(0, 9).', 1')
  3. ?>


Cytat
...w oczekiwaniu na rozwiązanie mojego głównego problemu z sql postanowiłem się wziąć za coś innego.


nie ucz się programować poprzez zakładanie tematów na forum, radze kupić książkę
zdzichu
wiem, że można to rozwiązać w php - mnie jednak interesuje rozwiązanie czysto sqlowe (bo nie wierze,że się nie da...)
erix
Można dać ORDER BY RAND(), ale jest to mało wydajne. Lepiej jest właśnie wygenerować identyfikatory i bezpośrednio wg nich wyciągać.
kefirek
  1. SELECT * FORM (SELECT * FROM tabela ORDER BY created_at DESC LIMIT 10 ) AS tabela ORDER BY RAND() LIMIT 1
eai
kefirek, miałeś literówke i nie potrzebne jest as table

Ostatecznie powinno to wyglądać tak:
  1. SELECT * FROM (SELECT * FROM tabela ORDER BY created_at DESC LIMIT 10 ) ORDER BY RAND() LIMIT 1
calebos
As table jest potrzebne bo kazdy subselect musi miec swoj alias Twoje zapytanie zwroci blad
eai
Ok, masz racje.
dymsza
witam

jeśli rekordy są stałe dana słownikowa czy coś to możesz je ponumerować 1 do 10

i

  1. SELECT * FROM bla WHERE lp = round(RAND()*10);



i jest maga szybkie aczkolwiek zalecane rozwiązanie(order by rand() ) jest nawet na stronie mysql

pozdro
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.