【问题标题】:SELECT * FROM table WHERE value IN array only return one resultSELECT * FROM table WHERE value IN array 只返回一个结果
【发布时间】:2019-12-14 17:10:36
【问题描述】:

我正在尝试从 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”的帖子。我做错了什么?

【问题讨论】:

  • 它返回任何东西都令人惊讶,因为您实际上是在要求 ID 等于 1,2 的帖子——但我猜 MySQL 的松散类型转换又来了。

标签: php mysql sql arrays


【解决方案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";

【讨论】:

    猜你喜欢
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多