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 是行不通的。对于这种情况,您需要动态编写查询
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 是行不通的。对于这种情况,您需要动态编写查询