【问题标题】:How to get values in one column where another column equals a value with SQL, and store into an array in PHP?如何获取一列中的值,其中另一列等于 SQL 的值,并存储到 PHP 中的数组中?
【发布时间】:2018-09-13 23:15:37
【问题描述】:

这是我的桌子:

user_id | group_id
------------------
1       | 22
2       | 22
3       | 22
4       | 1
5       | 1

我只想从 group_id 22 中获取 user_id 并将它们存储到一个数组中。

我的 PHP 代码:

$group_id=22;
$user_ids_ar = mysqli_fetch_array($db->query("SELECT user_id FROM table WHERE group_id=".$group_id.";"), MYSQLI_NUM);

它似乎只返回一个值而不是预期的 3。我该如何解决这个问题?

【问题讨论】:

  • query() 返回一组数据和一个指示“当前”行是什么的内部指针。当您从query() 返回结果时,指针将位于第一行。然后当您调用mysqli_fetch_array() 时,它会将指针所在行(第一行)的数据作为数组返回。 fetch 数组函数也会增加指向下一行的指针,因此如果您再次调用mysqli_fetch_array(),它将返回第二行(指针现在移动到的位置)。等等。这就是 RiggsFolly 的答案使用循环的原因。

标签: php mysql sql arrays


【解决方案1】:

您只返回一行,因为您只要求一行。您需要循环获取所有内容。

$group_id=22;
$result = $db->query("SELECT user_id FROM table WHERE group_id=".$group_id);
while ( $row = mysqli_fetch_array($result, MYSQLI_NUM) ) {
    $user_ids_ar[] = $row;
}

或者您可以使用您正在使用的表单中的 fetchAll。

$group_id=22;
$user_ids_ar = mysqli_fetch_all(
                                $db->query("SELECT user_id 
                                            FROM table 
                                            WHERE group_id=".$group_id)
                            , MYSQLI_NUM);

【讨论】:

  • mysqli_fetch_all 通常是这样直截了当的方法。更好的性能和更简洁的代码。
  • @RToyo 不一定,特别是如果您在一个查询中返回 1000 行
  • 这是一个很好的观点,我应该在我的评论中明确指出。我正在考虑 OP 问题的确切场景,他们期望 3 行结果集。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 2022-07-31
  • 1970-01-01
  • 2021-01-18
相关资源
最近更新 更多