php - MYSQL 仅从表中显示一次列值

标签 php mysql group-concat

我有两个表,分别名为发票和发票产品。可视化:

发票表

Invoice_Number  Invoice_Date  Customer_Name  Total_Amount 

     1           2013-08-01        XYZ        10000
     2           2013-08-02        ABC         7000
     3           2013-08-03        DEF         4000

发票产品表

Invoice_Number    Product_names     Price

       1              prd1          5000
       1              prd2          3000
       1              prd3          2000
       2              prd22         3000
       2              prd25         4000
       3              prd13         2500
       3              prd16         1500

我想通过组合两个表来获得以下输出。

Invoice_Number  Invoice_Date  Product_names Customer_Name  Total_Amount 

     1           2013-08-01        prd1          XYZ         10000
                                   prd2
                                   prd3

     2           2013-08-02        prd22         ABC         7000
                                   prd25

     3           2013-08-03        prd13         DEF         4000
                                   prd16

我尝试了以下查询。

select Invoice_Number,Invoice_Date,Product,Customer_Name,Total_Amount from invoice,invoice_product where invoice.Invoice_Number=invoice_product.invoice_Number;

我得到以下输出。

Invoice_Number  Invoice_Date  Product_names Customer_Name  Total_Amount 

     1           2013-08-01        prd1          XYZ         10000
     1           2013-08-01        prd2          XYZ         10000
     1           2013-08-01        prd3          XYZ         10000

     2           2013-08-02        prd22         ABC         7000
     2           2013-08-02        prd25         ABC         7000

     3           2013-08-03        prd13         DEF         4000
     3           2013-08-03        prd16         DEF         4000

我是否需要在查询中使用诸如 Having,Distinct,Group By 之类的内容才能获得所需的输出?我是 mysql 的新手。如有任何帮助,我们将不胜感激。

最佳答案

如果您确实希望每张发票只包含一行,但希望列出每个产品,我建议使用 GROUP_CONCAT() 函数,如下所示:

SELECT
  i.Invoice_Number AS Invoice_Number,
  i.Invoice_Date AS Invoice_Date,
  GROUP_CONCAT(ip.Product) AS products,
  i.Customer_Name AS Customer_Name,
  i.Total_Amount AS Total_Amount
FROM invoice AS i
INNER JOIN invoice_product AS ip
  ON i.Invoice_Number=ip.invoice_Number
GROUP BY i.Invoice_Number

默认情况下,GROUP_CONCAT() 使用逗号作为值之间的分隔符,因此对于 products 列,您将获得类似 prd1,prd2,prd3 的值。您可以根据需要指定不同的分隔符。

关于php - MYSQL 仅从表中显示一次列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18084036/

相关文章:

php - 获取 Eloquent 模型实例的主键

php - 什么路径是可以接受的?

php - 对外关系如何设置?

php - 在 if/else 语句中使用命名空间

php - 如何通过表单将数据插入数据库并将某些表单字段留空?

php - 无法分配使用 php 获取的变量

SQLite group_concat 排序

mysql - 带有 WHERE IN 子句的 GROUP_CONCAT

MYSQL GROUP_CONCAT 和 IN

php - php中的粘性下拉框问题