【发布时间】:2016-11-03 11:46:05
【问题描述】:
我见过很多类似问题的问题。然而,所有的答案都是误导性的。大多数答案都说使用FIND_IN_SET,这对我的问题似乎不正确。
以下查询:
SELECT
*
FROM
data_table
WHERE field_id IN ('618,622,626,773,776');
通常只会显示第一个 ID 行。在这个例子中是'618'
id data
--- ------
618 ....
如果不使用任何存储过程或用户定义的函数, 怎么办?显示以下结果:
id data
--- ------
618 ....
622 ....
626 ....
773 ....
776 ....
注意; '618,622,626,773,776' 将始终保留为字符串。这就是问题所在。
【问题讨论】:
-
这里为什么
FIND_IN_SET“完全不正确”?它在包含以逗号分隔的条目的字符串中查找条目。这不正是你想要的吗?另一方面,IN在数据集中查找条目,但您没有数据集,您有一个字符串。 -
FIND_IN_SET 是正确答案。
SELECT * FROM foo WHERE FIND_IN_SET(field_id, '618,622,626,773,776') -
附注:在我看来,您的查询找到 field_id 618 的记录是 DBMS 中的一个缺陷。 '618,622,626,773,776' 不应该转换为 int,但 MySQL 只是简单地转换第一个子字符串。
-
你好。这组数字来自php?
-
似乎您不需要引号,但我不清楚您的注释,它始终是一个字符串。
WHERE field_id IN (618,622,626,773,776)的形式应该可以工作
标签: mysql