#mysql #sql #select
#mysql #sql #выберите
Вопрос:
возможно ли в MySQL использовать значение столбца с условием sql в качестве оператора and condition in?
MySQL-Таблица
|id|name |valid_from |valid_to|active|language|color|sub_condition|
|1 |test 1|2019-03-01 05:20:15|null |1 |en |red |language='en'|
|2 |test 2|2019-03-01 05:20:15|null |1 |de |blue |color='blue' |
Запрос
SELECT *
FROM `table`
WHERE active = 1 AND
valid_from <= NOW() AND
sub_condition
sub_condition должно быть значением из таблицы.
Что я хочу сделать, так это определить более подробные условия в выбранных строках, чтобы более подробно отфильтровать всю таблицу.
Спасибо
Комментарии:
1. Да, это «возможно». Если вам нужна помощь в разработке запроса, пожалуйста, опубликуйте, что это
sub_condition
такое.
Ответ №1:
Я думаю, вы спрашиваете:
Могу ли я сделать что-то вроде eval() в SQL для вычисления выражения, хранящегося в data?
Нет, вы не можете. Весь синтаксис запроса, такой как выражения, имена таблиц и столбцов, должен быть явным и фиксированным до подготовки запроса. Значения данных, считываемые запросом во время выполнения, не могут изменить логику запроса.
Вы можете прочитать данные, а затем, в зависимости от того, как ваше приложение интерпретирует эти данные, запустить второй SQL-запрос с этой логикой. Но у вас не может быть одного запроса, который одновременно считывает данные и выполняет логику во время одного и того же запроса.
Ответ №2:
вы должны использовать псевдоним.
SELECT * FROM table t WHERE t.active=1 AND t.valid_from <= NOW() AND (select * from table where (sub_condition))
И подусловия.
Ответ №3:
Да, это возможно.
Но это зависит от того, что вы ищете.
Например, вы можете LIKE
.
И одинарные кавычки могут быть экранированы обратной косой чертой.
SELECT * FROM `table`
WHERE active=1
AND valid_from <= NOW()
AND sub_condition LIKE '%language='en'%'
Ответ №4:
Вы не можете использовать значение столбца в качестве условия И для фильтрации результатов, но вы можете использовать имя столбца в качестве условия И для фильтрации результатов.
SQL-запрос будет рассматривать language=’en’ в имени столбца sub_condition как значение столбца, а не иначе.
Подходящий способ фильтрации результатов выглядит следующим образом
Пример;
$results = mysql_query(«ВЫБРАТЬ * ИЗ table
, ГДЕ active=1 И valid_from <= NOW() И lang=’eng'»);