我正在处理一个给我带来困难的查询。
基本上,我的数据库 race
中有一列包含动态值(这些示例不是真正的交易内容,但代码是相同的)。
race 可以为 NULL(不需要特定的种族) 或 race 可以包含 1 个或多个值(“human,lizard,dog”等)
我的查询是:
$var = $db->Query('SELECT * FROM table WHERE race LIKE "%'.$specie.'%"OR race IS NULL');
但是,这是行不通的。这条语句的流程中是否有错误会使查询不返回任何内容? (显示默认的“空结果”)
编辑:用英语我希望我的查询说“如果找到特定种族,或者根本没有种族要求(空),请选择所有数据”
最佳答案
也许您对FIND_IN_SET()
感兴趣,假设您的可能值以逗号分隔存储:
$var = $db->Query('SELECT *
FROM table
WHERE
FIND_IN_SET("' . $specie . '", race)
OR race IS NULL
');
此处适用标准备注:
- 不要相信用户输入。始终使用 prepared statements处理输入变量。 SQL injection不好!</li>
- 优化您的数据库以提高性能并更精确地制定查询! race 可以在自己的表中,在它们之间使用
N:M
关系。
关于php - mysql IS NULL/LIKE %% 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17375028/