Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Losowanie z pośród posortowanych danych...
bogdan89
post
Post #1





Grupa: Zarejestrowani
Postów: 320
Pomógł: 36
Dołączył: 28.08.2006
Skąd: Wrocław

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
ziqzaq
post
Post #2





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

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


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

Ten post edytował ziqzaq 12.02.2009, 13:14:19
Go to the top of the page
+Quote Post
bogdan89
post
Post #3





Grupa: Zarejestrowani
Postów: 320
Pomógł: 36
Dołączył: 28.08.2006
Skąd: Wrocław

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


Jest ok, dzięki ziqzaq.
Teraz, które rozwiązanie Waszym zdaniem jest lepsze?

Ten post edytował bogdan89 12.02.2009, 13:20:08
Go to the top of the page
+Quote Post
Orkan
post
Post #4





Grupa: Zarejestrowani
Postów: 55
Pomógł: 4
Dołączył: 19.05.2003
Skąd: Gdańsk

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


A może tak:

  1. ( SELECT * FROM my_table ORDER BY ilosc DESC LIMIT 10 ) ORDER BY RAND();


--------------------
The fastest app with PHP: <?php die('Hello World'); ?>
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: 21.08.2025 - 13:18