Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak wybrać losowe rekordy z bazy i je pos
xPatryk
post
Post #1





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 9.01.2004

Ostrzeżenie: (20%)
X----


Witam (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Method
post
Post #2





Grupa: Zarejestrowani
Postów: 177
Pomógł: 6
Dołączył: 14.01.2003
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kszychu
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


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ć.
Go to the top of the page
+Quote Post
scanner
post
Post #4





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




  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ą...
Go to the top of the page
+Quote Post
spenalzo
post
Post #5





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


[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]
Go to the top of the page
+Quote Post
spenalzo
post
Post #6





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


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.
Go to the top of the page
+Quote Post
teles
post
Post #7





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 29.10.2003
Skąd: Warszawa

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Vertical
post
Post #8





Grupa: Zarejestrowani
Postów: 848
Pomógł: 0
Dołączył: 7.07.2004
Skąd: Wrocław

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


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...
Go to the top of the page
+Quote Post
Yoshi
post
Post #9





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 21.09.2002

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


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 "()" (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) hehe
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 16:01