在mySQL中,是否可以在SQL条件中使用列值,即。 WHERE 子句?
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 应该是表中的值。
我想在选定的行中定义更详细的条件。
我想你问的是:
我可以在 SQL 中执行类似 eval() 的操作来计算存储在数据中的表达式吗?
不,你不能。在准备查询之前,所有查询的语法(如表达式、表名和列名)都必须是明确且固定的。查询在执行期间读取的数据值无法更改查询的逻辑。
您可以读取数据,然后根据您的应用程序解释该数据的方式,使用该逻辑运行第二 SQL 查询。但您不能让一个查询在同一个查询期间既读取数据又执行逻辑。
你必须使用别名。
SELECT * FROM table t WHERE t.active=1 AND t.valid_from <= NOW() AND (select * from table where (sub_condition))
以及子条件。
是的,这是可能的。
但这取决于您要寻找什么。
例如,您可以
LIKE
。SELECT * FROM `table`
WHERE active=1
AND valid_from <= NOW()
AND sub_condition LIKE '%language=\'en\'%'
不能使用列值作为 AND 条件来过滤结果,但可以使用列名作为 AND 条件来过滤结果。
SQL 查询会将 sub_condition 列名称中的 language='en' 视为列值,否则不考虑。
过滤结果的适当方法是这样的
示例;
$results = mysql_query("SELECT * FROM
table
WHERE active=1 AND valid_from <= NOW() AND lang='eng'");