繁体   English   中英

SELECT * FROM table WHERE value IN array 只返回一个结果

[英]SELECT * FROM table WHERE value IN array only return one result

我试图从一个表中获取所有帖子,其中 id 在一个数组中。 所以,我有一个有 2 个 id 的数组,这 2 个 id 有一个帖子,但查询只返回第一个 id 的帖子。

这是我的带有示例值的代码:

$ides= array();
array_push($ides, '1, 2');
    $ids = implode(',',$ides);  
                $sql="SELECT * FROM post WHERE id IN ('$ids') ORDER BY date DESC";

然后,在这种情况下,我得到的结果只是 id 为“1”的帖子。 我究竟做错了什么?

您的查询仅返回一个结果,因为您将两个值都括在单引号中。 所以你的查询看起来像这样

SELECT * FROM post WHERE id IN ('1, 2') ORDER BY date DESC

它应该是这样的

SELECT * FROM post WHERE id IN (1,2) ORDER BY date DESC

如果您在 mysql 控制台中运行初始查询,它可能会向您显示警告

mysql> select cast('1,2' as unsigned);
+-------------------------+
| cast('1,2' as unsigned) |
+-------------------------+
|                       1 |
+-------------------------+
1 row in set, 1 warning (0.01 sec)

mysql> show warnings;
+---------+------+------------------------------------------+
| Level   | Code | Message                                  |
+---------+------+------------------------------------------+
| Warning | 1292 | Truncated incorrect INTEGER value: '1,2' |
+---------+------+------------------------------------------+
1 row in set (0.00 sec)

mysql>

要修复它,我建议使用以下代码

$ids = [1,2];
$ids_string = implode(',',$ids);
$sql="SELECT * FROM post WHERE id IN ($ids_string) ORDER BY date DESC";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM