SQL Select where IN (array) returns 仅当找到数组中的第一项时

SQL Select where IN (array) returns only when first item in array found

SQL 在 'services' 列中我有一个数组值,例如:2,19,72,5,46,45,38,40,36,27,29

为了从数据库中选择这一行,我使用了这个查询:

SELECT * FROM myTable WHERE `services` IN (2,19)

它工作正常。但是,当我对 'IN' 闭包进行如下更改时:

SELECT * FROM myTable WHERE `services` IN (19)

它总是 returns 0 行。查询仅搜索列中的第一个值。 为什么会发生这种情况?如何更改我的查询以使其正常工作?

提前致谢。

使用下面的代码:-

$recordsArr = [2,19,72,5,46,45,38,40,36,27,29]; // Your array
$records = implode(',', $recordsArr);  // Your string
$sql="SELECT * FROM myTable WHERE services IN( $records )"; // Your query

希望对您有所帮助:-)

您的数据存储为文本,因此您需要这样做:

SELECT * FROM myTable WHERE `services` LIKE '%,2,%' OR `services` LIKE '2,%' OR `services` LIKE '%,2' OR services` LIKE '%,19,%' OR `services` LIKE '19,%' OR `services` LIKE '%,19'

这很慢,而且会很快变得复杂。您应该找到另一种方式来存储您的数据。

SELECT * 从 myTable WHERE FIND_IN_SET('$array','services')

像这样更新您的查询: 如果您只搜索单个值...

SELECT * FROM myTable WHERE concat(',',`services`,',') like '%19%'

但是如果你想搜索 19,2 或 2,40 或 40,19 是行不通的。对于这种情况,您需要动态编写查询