123456
25.07.2015 - 14:47
есть таблица
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
25.07.2015 - 14:51
чтоб было более понятно, то это система квестов(таблица не полная)
Сначала num -который передается, это сколько квестов пользователь выполнил на своем уровне, а lv - \то его уровень
На каждом уровне сначала надо выполнить обязательные квесты(по порядку), а потом будут появляться случайные квесты..
123456
25.07.2015 - 14:53
а этим запросом мы определяем, какие квесты будут начислены пользователю.
LIMIT 3 указан для примера
Цитата |
если остались только записи с num=999, то выбираются случайные записи при num = 999
|
Где это в Вашем запрсосе?
Можно что-то типо такого запроса
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
25.07.2015 - 15:35
Цитата |
Цитата если остались только записи с num=999, то выбираются случайные записи при num = 999
Где это в Вашем запрсосе? |
Вот и я был удивлен, но этот запрос работает!
По этому и написал
Цитата |
И как нистранно, он вроде как работает! |
Цитата (123456 @ 25.07.2015 - 11:35) |
Цитата | Цитата если остались только записи с num=999, то выбираются случайные записи при num = 999
Где это в Вашем запрсосе? |
Вот и я был удивлен, но этот запрос работает!
По этому и написал
Цитата | И как нистранно, он вроде как работает! |
|
Все работает кроме этого условия.
Цитата |
если остались только записи с num=999, то выбираются случайные записи при num = 999 |
Вы отсортеровали по возрастанию,и в конце у Вас идут все записи с num 999 но они идут упорядочанно, а не случайным образом.
123456
25.07.2015 - 15:40
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
)
)
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.