php - Mysql如何处理JOIN和重复条目

标签 php mysql sql

我有一个包含所有文章的 articles 表。
我有一个 comments 表,其中包含一个 article_id 字段,其中包含文章的评论。

我首先像这样进行连接查询:

SELECT Article.*, Comment.* FROM articles LEFT JOIN comments As Comment ON(Article.id = Comment.article_id)

我的数据格式如下:

Article1 Comment1
Article1 Comment2
Article1 Comment3

然后我使用了分组依据:

SELECT Article.*, Comment.* FROM articles LEFT JOIN comments As Comment ON(Article.id = Comment.article_id) GROUP BY Article.id

我的数据格式如下:

Article1 Comment1

我希望我的数据格式如下:

Article1 Comment1
         Comment2
         Comment3

是否有使用 MySQL 来将我的数据格式化为这样?如果可能的话,避免子查询?

最佳答案

正如评论所说,最好在表示层而不是数据层中执行此操作。 MySQL 和其他数据库引擎擅长存储数据、以最佳方式执行查询并获取结果。没有一种简单的方法可以满足您的要求。当然你可以做这样的事情,但是在前端做会更有效率。我使用 C# 和 SQL Server,除了简单地使用 SQL 检索数据之外,我想不出有任何一种情况可以做更多的事情。无论您想做什么,使用表示层进行处理都要容易得多。您的一条评论询问了如何处理一百万行。我经常使用的几个表的行数超过十亿。我仍然不会在 SQL Server 中进行任何格式化。

您问 GROUP BY 函数的用途是什么。简而言之,GROUP BY 表示将记录分组,其中 GROUP BY 子句中的所有列都相同。 GROUP BY 最常见的用途之一是计数和聚合函数(COUNT()、SUM() 等)。考虑以下查询:

SELECT 
    Customer_Id, 
    COUNT(Order_Id), 
    SUM(Amount_Paid), 
    SUM(Amount_Paid) / COUNT(Order_Id)
FROM dbo.Sales
GROUP BY Customer_Id

在此查询中,我们从虚构的 Sales 表中选择记录。当我们说GROUP BY Customer_Id时,我们基本上是说“创建组并将具有相同Customer_Id的所有记录放入同一组中”。如果我们想要计算客户已下订单的数量 (COUNT(Order_Id)),或者如果我们想要查看客户在我们商店花费了多少钱 (SUM( Amount_Paid),或者即使我们想查看每个客户每个订单花费的平均金额 (SUM(Amount_Paid)/COUNT(Order_Id))。

这只是一个简单的示例,用于展示 GROUP BY 在基本情况下如何工作。然而,它并不是为您尝试使用它做的事情而设计的。在某些情况下,它会消除重复记录(尽管如果这就是您想要做的全部,DISTINCT 可能会更容易),但它不太适合查询输出的高级格式化。

关于php - Mysql如何处理JOIN和重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25233697/

相关文章:

sql - SUM 与 group by 返回错误

mysql - 以不同的方式编写查询相同的方法

php - MySql 查询中基于初始查询结果的新查询

php - 使用 PECL 安装扩展是否会警告我它将进行的任何更改?

php - 警告 : Invalid argument supplied for foreach() in

mysql - 如何在该表的左连接后使用左外连接?

mysql - 如何解决MySQL由于hibernate envers审计而导致的死锁?

MySQL错误: Subquery returns more than one row

mysql - 使用带有散列值的 FIND_IN_SET 我的 sql 函数

php - 如何安装phpUnit测试?