【问题标题】:Adding MySQL result in php array has duplicate values在php数组中添加MySQL结果具有重复值
【发布时间】:2017-04-23 08:03:25
【问题描述】:

解释场景:

我在 MySQL 数据库中有这张表

+-------------------------------------------------------------------------+    
| message_id | client_id | admin_id | message | date_posted | read_status |
+-------------------------------------------------------------------------+

我正在为同一个客户端选择所有消息并将它们分组到一个 2D 数组中,以便结果看起来像

 $messages = array( 
             "4" => array ("338", "4", "1", "message1", "20170904 120803", "0"),
             "5" => array ("339", "5", "1", "message2", "20170904 120807","0")
             ); 

我得到的结果是相似的,但是数组中的每个值都是重复的

array (size=12)
  'message_id' => string '22' (length=2)
  0 => string '22' (length=2)
  'client_id' => string '14' (length=2)
  1 => string '14' (length=2)
  'admin_id' => string '1' (length=1)
  2 => string '1' (length=1)
  'message' => string 'hii I'm new to this' (length=19)
  3 => string 'hii I'm new to this' (length=19)
  'date_posted' => string '2017-04-22 17:17:13' (length=19)
  4 => string '2017-04-22 17:17:13' (length=19)
  'read_status' => string '0' (length=1)
  5 => string '0' (length=1)

这是我的查询

$grouped_messages = array();

foreach ($connect->query("SELECT DISTINCT * FROM request ORDER BY client_id") as $row) {
  var_dump($row);
    $client_id = $row['client_id'];

    if (!isset($grouped_messages[$client_id])) {
        $grouped_messages[$client_id] = array();
    }

    $grouped_messages[$client_id][] = $row;

}


 foreach ($grouped_messages as $client_id => $client_messages) {
    echo '<div>';
    echo '<p>Messages for client #' . $client_id . '</p>';

    foreach ($client_messages as $message) {
      foreach($message as $column) {
        echo $column;
      }
    }

    echo '</div>';
} 

关于为什么会发生这种情况的任何想法?

PS同一个客户端可以有多个消息,这意味着该表中有多个行,这就是它将来自同一客户端的所有这些消息放入关联数组的代码!

【问题讨论】:

  • 请注意,DISTINCT * 是矛盾的

标签: php mysql arrays pdo


【解决方案1】:

同时获取数字和文本键是 PDO 获取的默认行为。

您可以更改它,在您的情况下,这应该通过将属性 PDO::ATTR_DEFAULT_FETCH_MODE 设置为 PDO::FETCH_ASSOC 来完成:

$connect->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

或者你可以在实例化新的 PDO 对象时这样做。

更多模式here.

【讨论】:

    猜你喜欢
    • 2012-04-20
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 2015-08-11
    • 2014-07-23
    • 2015-09-11
    相关资源
    最近更新 更多