Возможно ли использовать SQL-запрос значения столбца в качестве условия и

#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'»);