[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка ORDER BY ASC, RANDOM()
123456
есть таблица

id | num | lv
1 | 1 | 2
2 | 3 | 2
3 | 2 | 2
4 | 999 | 2
5 | 999 | 2
6 | 1 | 3
7 | 2 | 3
8 | 999 | 3
9 | 999 | 3

Пользователь передает значение столбца num и lv.
Необходимо выбрать 3 записи, чтоб num был больше переданного значения(num).
Первым делом должны выбираться записи по возрастанию(num), если остались только записи с num=999, то выбираются случайные записи при num = 999

Вот пример:

Условие:
num=1
lv=2

Ответ:
Строки: 2, 3, и [4 или 5]
Обратите внимание, сначала 2, 3, а потом уже случайное.

//-----------

Условие:
num=3
lv=2

Ответ:
Строки: [4 или 5] (в любом порядке)



написал такой запрос.. И как нистранно, он вроде как работает!

$sql = DB::q("
SELECT *
FROM `table`
WHERE lv = 2 AND num > 2
ORDER BY num, RAND()
LIMIT 3"
);


Проверьте или правильно написан запрос! и как избавиться от рандома?
123456
чтоб было более понятно, то это система квестов(таблица не полная)
Сначала num -который передается, это сколько квестов пользователь выполнил на своем уровне, а lv - \то его уровень

На каждом уровне сначала надо выполнить обязательные квесты(по порядку), а потом будут появляться случайные квесты..
123456
а этим запросом мы определяем, какие квесты будут начислены пользователю.
LIMIT 3 указан для примера
Oyeme
Цитата
если остались только записи с num=999, то выбираются случайные записи при num = 999


Где это в Вашем запрсосе?
Oyeme
Можно что-то типо такого запроса
SELECT * 
FROM `table`
WHERE lv = 2 AND num > 2
ORDER BY num , CASE WHEN num =999 THEN RAND() ELSE 1 END ASC
LIMIT
3
123456
Цитата

Цитата
если остались только записи с num=999, то выбираются случайные записи при num = 999


Где это в Вашем запрсосе?



Вот и я был удивлен, но этот запрос работает!


По этому и написал
Цитата
И как нистранно, он вроде как работает!

Oyeme
Цитата (123456 @ 25.07.2015 - 11:35)
Цитата

Цитата
если остались только записи с num=999, то выбираются случайные записи при num = 999


Где это в Вашем запрсосе?



Вот и я был удивлен, но этот запрос работает!


По этому и написал
Цитата
И как нистранно, он вроде как работает!

Все работает кроме этого условия.

Цитата
если остались только записи с num=999, то выбираются случайные записи при num = 999


Вы отсортеровали по возрастанию,и в конце у Вас идут все записи с num 999 но они идут упорядочанно, а не случайным образом.
123456
Oyeme

Вот протестировал. Вроде все работает. Я сам не понимаю как, но оно работает!

lv = 2
num = 1

Array
(
[
0] => Array
(
[
id] => 3
[num] => 2
[lv] => 2
)

[
1] => Array
(
[
id] => 2
[num] => 3
[lv] => 2
)

[
2] => Array
(
[
id] => 5
[num] => 999
[lv] => 2
)

)
-------------------------------


lv = 2
num = 3

Array
(
[
0] => Array
(
[
id] => 5
[num] => 999
[lv] => 2
)

[
1] => Array
(
[
id] => 4
[num] => 999
[lv] => 2
)

)
-------------------------------


lv = 2
num = 3

Array
(
[
0] => Array
(
[
id] => 4
[num] => 999
[lv] => 2
)

[
1] => Array
(
[
id] => 5
[num] => 999
[lv] => 2
)

)

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.