首页 > 解决方案 > 如何在 php mysql 中不获取重复数据

问题描述

我有一个 mysql 查询,我正在从两个表中获取详细信息,现在我想要请求待处理的用户的数据,以及来自其他数据中心的用户的数据,我想要他们拥有的 PIN 码,所以我进行了这个查询,它工作正常,但它给出我也重复了名称和中心的数据。这是我的查询

$sql = "
SELECT u.username
     , u.district
     , u.requests
     , c.username
     , c.id 
  FROM users u
  JOIN center c
    ON u.username = c.username 
 where u.requests = 'pending'
";
$result = mysqli_query($con, $sql);

if (mysqli_num_rows($result)>0)  {
while ($row = mysqli_fetch_assoc($result)) {
    $name = $row['username'];
    $district = $row['district'];
    $center = $row['id'];?>
    <tr><td><?php echo $row['username']?></td><td><?php echo $row['district']?></td><td><?php echo $row['id']?></td></tr>

    <?php
}
}
     ?>

以下提供了当前输出的文本表示,以便更好地理解。

name  center pin code
dhruv mumbai 5545454
dhruv mumbai 2618165165

我想要逗号中的 $center 变量,并且不希望它重复名称和区域变量,所以是这样的:

标签: phpmysql

解决方案


在 MySQL 中,您可以使用GROUP_CONCAT逗号分隔的值列表。将您的查询更改为

$sql = "
SELECT u.username
     , u.district
     , u.requests
     , GROUP_CONCAT(c.id) AS id
  FROM users u
  JOIN center c
    ON u.username = c.username 
 where u.requests = 'pending'
GROUP BY u.username
       , u.district
       , u.requests";

注意我已从列表中删除,因为它与(由于条件)具有相同的值,c.username并且由于它具有相同的列名,它将覆盖输出数据。SELECTu.usernameJOINu.username


推荐阅读