Можно ли использовать значение столбца sql запроса в качестве условия - PullRequest
0 голосов
/ 02 марта 2019

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

MySQL-Table

|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 должен быть значением из таблицы.

Я хочу определить более подробные условия в выбранных строках, чтобыотфильтруйте всю таблицу более подробно.

Спасибо

Ответы [ 4 ]

0 голосов
/ 02 марта 2019

Я думаю, что вы спрашиваете:

Могу ли я сделать что-то вроде eval () в SQL, чтобы оценить выражение, хранящееся в данных?

Нет, ты не можешь.Весь синтаксис запроса, например выражения, имена таблиц и имена столбцов, должен быть явным и фиксированным до подготовки запроса.Значения данных, которые запрос читает во время выполнения, не могут изменить логику запроса.

Вы можете прочитать данные, а затем, в зависимости от того, как ваше приложение интерпретирует эти данные, выполнить второй SQL-запрос с этимлогика.Но у вас не может быть одного запроса, который одновременно считывает данные и выполняет логику во время одного и того же запроса.

0 голосов
/ 02 марта 2019

Вы должны использовать псевдоним.

SELECT * FROM table t WHERE t.active=1 AND t.valid_from <= NOW() AND (select * from table where (sub_condition))

И подусловие.

0 голосов
/ 02 марта 2019

Вы не можете использовать значение столбца в качестве условия AND для фильтрации результатов, но вы можете использовать имя столбца в качестве условия AND для фильтрации результатов.

SQL-запрос будет рассматривать language = 'en' в имени столбца sub_condition какзначение столбца, а не иначе.

Соответствующий способ фильтрации результатов выглядит следующим образом:

Пример;

$ results = mysql_query ("SELECT * FROM table WHERE active = 1 AND valid_from <= NOW () AND lang = 'eng'"); </p>

0 голосов
/ 02 марта 2019

Да, это возможно.
Но это зависит от того, что вы ищете.

Например, вы можете LIKE.
И одиночные кавычки можно экранировать с помощью обратной косой черты.

SELECT * FROM `table` 
WHERE active=1 
  AND valid_from <= NOW()
  AND sub_condition LIKE '%language=\'en\'%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...