Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak wybrać losowe rekordy z bazy i je pos
Forum PHP.pl > Forum > Bazy danych > MySQL
xPatryk
Witam smile.gif

Mam problem...

potrzebuję pobrać losowe dane z bazy w mysql'u i posortować je rosnąco według zadanego kryterium...

Do tej pory używałem
  1. SELECT * FROM Quiz ORDER BY RAND(); LIMIT 10
, jednakże to nie daje możliwości posortowania danych...

Czy jest jakas inna metoda ?

Pozdrawiam
Patryk
Method
no bo nie bardzo!
zastanow sie co chcesz zrobic ! kazesz wylosowac rekordy i potem je posortowac hmm jesli wykorzystujesz php'a to otrzymujesz jako wynik otrzymujesz tablice - a jak wiadomo tablice mozna posortowac np w php'ie bez przeszkód smile.gif
kszychu
Nasuwa mi się rozwiązanie, ale za pomocą dwóch selectów:
1. Wyciągasz z bazy max(id) wszystkich rekordów.
2. losujesz z nich w php potrzebną ci ilość liczb.
3. wyciągasz z bazy rekordy, których id = wylosowanym liczbom.
możesz to sobie wtedy dowolnie posortować.
scanner
  1. SELECT imie, nazwisko FROM ludzie ORDER BY RAND(), nazwisko ASC LIMIT 10
Czy to przypadkiem nie zadziała? Nie mam bazy pod ręką...
spenalzo
[php:1:9f208fea02]<?php

$t=mysql_fetch_array(mysql_query("SELECT max(id) as ile FROM tabela"));
$ile=$t["ile"];

$rand=array();
while(count($rand)<11)
{
$tmp=mt_rand();
if(!in_array($tmp,$rand))
{
$rand[]=$tmp;
}
}

$sql=@implode(",",$rand);
$q=mysql_query("SELECT * FROM tabela WHERE id IN (".$sql.") ORDER BY costam");
?>[/php:1:9f208fea02]
spenalzo
Cytat
[sql:1:31ebd76e89]SELECT imie, nazwisko FROM ludzie ORDER by RAND(), nazwisko ASC LIMIT 10[/sql:1:31ebd76e89]Czy to przypadkiem nie zadziała? Nie mam bazy pod ręką...

Nie sądze...
RAND() zwraca liczbę od 0-1.
Poza tym ORDER BY działa w ten sposób, ze drugi warunek jest uzywany, kiedy pierwsy jest taki sam - więc ten sposób odpada, biorąc pod uwage co zwraca RAND() i sposób sortowania przez ORDER BY.
teles
Ogólna zasada: Losowania i segregowania wylosowanych kolumn wg jakieś kolumny:
  1. SELECT a, b , c, RAND() AS losowo
  2. FROM TABLE ORDER BY a, losowo


Sam długo nad tym walczyłem! Ale dzięki temu można dodwać wagi ważności przy losowaniu rekordów smile.gif
Vertical
Cytat
potrzebuję pobrać losowe dane z bazy w mysql'u i posortować je rosnąco według zadanego kryterium...

Jeśli chcesz pobrać losowo i ustawić w kolejności to nie możesz dać
  1. ORDER BY RAND();

Bo wtedy posortuje Ci je w losowej kolejności...
Yoshi
meczylem sie nad losowym wybieraniem rekordow, pisalem
Kod
SELECT * FROM TABLE n RAND
i nic , pomyslalem "no nie! to niemozliwe! wejde na php.PL", a tu niespodzianka : trzeba dodac do RAND "()" exclamation.gif hehe
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.