#mysql #sql #sql-order-by #where-clause #sql-limit
#mysql #sql #sql-order-by #where-предложение #sql-limit
Вопрос:
PHP-скрипт возвращает значение, которое необходимо найти в первом столбце таблицы в базе данных MySQL.
Если точное значение, возвращаемое скриптом, появляется в этом первом столбце таблицы, тогда запрос должен извлечь дополнительную информацию из других столбцов вдоль этой строки.
Если значение скрипта не отображается в первом столбце таблицы, то ту же информацию следует извлечь из следующего наименьшего значения, если оно существует.
Таким образом, в базе данных есть строки, выглядящие следующим образом, с целевым значением поиска в первом столбце:
18 0.3783 0.4438 0.5155 0.5614 0.6787
19 0.3687 0.4329 0.5034 0.5487 0.6652
20 0.3598 0.4227 0.4921 0.5368 0.6524
25 0.3233 0.3809 0.4451 0.4869 0.5974
30 0.2960 0.3494 0.4093 0.4487 0.5541
Если возвращаемое значение скрипта равно 25
, то пять других других значений в той же строке:
0.3233 0.3809 0.4451 0.4869 0.5974
… должен быть извлечен.
Если значение сценария, однако, равно 24
, то необходимо извлечь информацию о строке со следующим наименьшим значением, которая будет соответствовать значению первого столбца базы 20
данных, равному:
0.3598 0.4227 0.4921 0.5368 0.6524
Какой запрос лучше всего подходит для этого?
Комментарии:
1. С небольшой, но важной технической точки зрения это выглядит как таблица
Ответ №1:
Вы можете фильтровать строки, первый столбец которых равен или меньше параметра, order by
по убыванию значения в этом столбце и сохранить только верхнюю строку, используя limit
.
Предполагая, что вызывается столбец фильтрации id
:
select *
from mytable
where id <= ?
order by id desc
limit 1
Знак вопроса представляет параметр запроса.
Комментарии:
1. Я слишком много думал об этом, и у меня был точно такой же запрос, но по какой-то причине я подумал, что он ошибочен. Но я не знаю, почему вопрос был воспринят как «неискренний».
2. @nev: согласен, я думаю, что этот комментарий несправедлив.