Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Losowanie z pośród posortowanych danych...
Forum PHP.pl > Forum > Bazy danych > MySQL
bogdan89
Witam, mam problem, a mianowicie chciałbym uzyskać pewien efekt. Najprościej będzie, jeśli przedstawię na przykładzie:

Mam w bazie danych tabelę, a w niej załóżmy pola: nazwa i ilość.
W tabeli jest pewna ilość rekordów, wartości w kolumnie ilość są od siebie różne.
Chciałbym teraz za pomocą jednego zapytania otrzymać np.: 10 rekordów z największą wartością w kolumnie ilość, ale w losowej kolejności.

znalazłem takie rozwiązanie, ale jakoś nie mogę sobie z nim poradzić:
  1. SELECT * FROM (SELECT * FROM my_table ORDER BY ilosc DESC LIMIT 10 ) ORDER BY RAND();


Aha... i ja wiem, że można oczywiście pobrać te 10 rekordów do tablicy posortowane po kolei według kolumny ilość, a następnie "porozrzucać" elementy tablicy (shuffle" title="Zobacz w manualu PHP" target="_manual), ale chciałbym też poznać alternatywę i zrobić to za pomocą samego MySQL.

I chciałbym też poznać waszą opinię, co do tego, które rozwiązanie byłoby bardziej optymalne przy gigantycznych rozmiarach bazy danych.
ziqzaq
Może tak:
  1. SELECT * FROM (SELECT * FROM my_table ORDER BY ilosc DESC LIMIT 10 ) AS a ORDER BY RAND();

Edit:
Testowane na mysql 5.0.75
bogdan89
Jest ok, dzięki ziqzaq.
Teraz, które rozwiązanie Waszym zdaniem jest lepsze?
Orkan
A może tak:

  1. ( SELECT * FROM my_table ORDER BY ilosc DESC LIMIT 10 ) ORDER BY RAND();
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.