【发布时间】:2011-06-05 14:39:15
【问题描述】:
如果我有类似的代码
$vals = "50,60,40";
输入 SQL
"SELECT * FROM TABLE WHERE col IN( $vals )"
如果我有一个像 50 这样的值并且我在 SQL 中的 col 包含“50,40,60”,则否
如何选择它
我的意思是 IN 语法的逆向
如果我在 sql 中有表包含类似的值
Firstname | Lastname | Age | Hobbies
Ahmed | Ali | 50 | run,swim
Mohammed | Ahmed | 30 | run
如果我想要谁可以在爱好中游泳
【问题讨论】:
-
如果您的列包含逗号分隔值,这几乎总是表明您的架构不正确。通常,您会为值使用单独的表,而不是将它们存储在用逗号分隔的单个列中。
-
我看不到他在哪里有一个包含 csv 的列。我认为他假设数据库会将他的 csv 分解为一系列。显然它没有,并尝试查看是否存在值为“50,60,70”的给定列,我怀疑它会。他首先需要一个 split 函数,以便在他的 $vals 变量中独立地看到每个值。
-
FIND_IN_SET(value,column) !=0可以提供帮助,但您应该接受@tvanfosson 的建议,因为它既是维护的噩梦,又不能利用密钥,所以它会比需要的慢很多。