2010-10-18 12 views

Odpowiedz

7

Działa to dobrze dla mnie. Pierwszym wynikiem jest zawsze rekord z ID 5, drugi wiersz jest losowy. Zwróć uwagę, że jeśli nie ma rekordu o identyfikatorze 5, oba wiersze będą losowe.

SELECT * FROM users ORDER BY (user_id = 5) DESC, RAND() LIMIT 0,2 
+0

ta jest poprawna, nie UNION +1 – Joony

+0

Dziękuję pekka. Próbowałem Twojego zapytania. Działa świetnie. +1. Co jeśli mam warunek. Czy mogę go tam użyć? powiedz np. SELECT * FROM users ORDER BY (now() MIĘDZY data_początkowa i data_końcowa) DESC, RAND() LIMIT 0,2 ?? – noobcode

+0

@noobcode sure, w zależności od tego, co chcesz zrobić. Losowy wiersz nie będzie podlegał warunkowi w ten sposób. –

0

Spróbuj

SELECT * FROM users WHERE user_id = 5 || user_id != 5 ORDER BY RAND() LIMIT 2 
+0

nie będzie działać: niekoniecznie podać identyfikator użytkownika 5 jako pierwszy wynik –

+0

Ach tak swojej prawej :) –

0

Unia powinny rade. Prawdopodobnie zapomniałeś LIMIT.

(SELECT * FROM users WHERE user_id = 5 LIMIT 1) 
UNION 
(SELECT * FROM users WHERE user_id != 5 LIMIT 1) 
0

Spróbuj tego:

SELECT * FROM users WHERE user_id=5 
union all (
    SELECT * FROM users WHERE user_id!=5 
    ORDER BY RAND() LIMIT 0,1) 
Powiązane problemy