Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Jak sprawić, aby zapytanie SQL zwracało różne wyniki ?
--Mati--
post
Post #1





Goście







Mam takie zapytanie:

  1. SELECT id,tytul FROM `m` WHERE `id`>0 AND `y`>0 AND `b`=0 LIMIT 1


Powiedzmy, że 100 rekordów spełnia te założenia, ale chciałbym, żeby to zapytanie nie zawracało mi pierwszego pasującego wyniku
tylko jakiś losowy z tych stu.

Nie wiem jak to zrobić, może wprowadzić tam gdzieś rand(), tylko gdzie i jak ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
--Mati--
post
Post #2





Goście







Po dodaniu do zapytania: ORDER BY RAND(), całość wykonuje się kilkaset razy wolniej niż bez tego, więc ten sposób odpada.
Macie jakieś pomysły jak w inny sposób zmusić zapytanie do pokazania losowego wyniku z puli wyników ?
Go to the top of the page
+Quote Post
AlexDeLarge
post
Post #3





Grupa: Zarejestrowani
Postów: 85
Pomógł: 14
Dołączył: 14.02.2010

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


1. ORDER BY RAND() LIMIT 1 - rozwiązanie ZŁE, w przypadku dużej liczby rekordów dla każdego wyniku musi zostać obliczona liczba pseudolosowa i na końcu wykonane sortowanie
2. SELECT COUNT(*) AS c FROM m WHERE (warunki)
i w PHP:
  1. $randrow = rand(0, $row['c']); //z zapytania
  2. $pdo->query("SELECT ... FROM ... WHERE ... LIMIT $randrow, 1");


Zdrówka życzę.

Ten post edytował AlexDeLarge 13.07.2011, 13:41:54
Go to the top of the page
+Quote Post
--mati--
post
Post #4





Goście







Dzięki za pomoc, zaraz to przetestuje.
Mam jeszcze pytanie, jaka funkcja jest potrzebna aby pobierać wyniki w ten sposób:

  1. $pdo->query("SELECT ... FROM ... WHERE ... LIMIT $randrow, 1");


Ja zawsze bawie się tak:

  1. $sql = 'SELECT';
  2. $result = mysql_query($sql);
  3. $row = mysql_fetch_array($result);


Ale chyba Twoim sposobem szybciej.
Go to the top of the page
+Quote Post
AlexDeLarge
post
Post #5





Grupa: Zarejestrowani
Postów: 85
Pomógł: 14
Dołączył: 14.02.2010

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


PDO
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: 23.08.2025 - 09:43