gpt4 book ai didi

php - mySQL PHP 查询将结果分组排列

转载 作者:行者123 更新时间:2023-11-30 01:25:45 25 4
gpt4 key购买 nike

我的问题是我目前正在编写的客户服务数据库。我对 sql 查询不太了解,而且我真的很难正确执行查询。

我有两个表:

**Customers:**
idcustomer
company_name
tel_number
address
postcode

**customer_machines**
id_customer_machine
id_customer
date_last_service
date_service_due

我想选择显示在一组给定日期之间哪些机器到期接受服务的结果(例如,机器在第 9 个月到期)。

SELECT customer_machines.* from customer_machines WHERE (customer_machines.date_next_service BETWEEN '2013-09-01' AND '2013-10-01') ORDER BY date_next_service ASC;

这很好,但有些客户拥有不止一台机器,例如

+---------------------+-------------+-------------------+-------------------+
| id_customer_machine | id_customer | date_last_service | date_next_service |
+---------------------+-------------+-------------------+-------------------+
| 1 | 1 | 2012-09-02 | 2013-09-02 |
| 2 | 2 | 2012-09-14 | 2013-09-14 |
| 3 | 3 | 2012-09-30 | 2013-09-30 |
| 5 | 3 | 2012-09-30 | 2013-09-30 |
+---------------------+-------------+-------------------+-------------------+

我需要对客户拥有的计算机进行分组,加入客户的详细信息并输出到浏览器中的表格,如下所示:

Customer 1     address of customer 1     tel of customer 1     postcode of customer 1
machine-id-1 date-last-service date-next-service
------------------------------------------------------------------------------------
customer 2 address of customer 2 tel of customer 2 postcode of customer 2
machine-id-2 date-last-service date-next-service
-------------------------------------------------------------------------------------
customer 3 address of customer 3 tel of customer 3 postcode of customer 3
machine-id-3 date-last-service date-next-service
machine-id-5 date-last-service date-next-service

我可以通过单个查询将结果排列在一起吗?到目前为止,我只尝试过在 php 中嵌套查询,但没有成功。

如果你能指出我正确的方向,那就太好了

谢谢

最佳答案

SQL 没有构建嵌套结果的功能,只有普通表。在一些简单的情况下,您可以使用 GROUP_CONCAT 来连接值。例如:

SELECT 
id_customer,
GROUP_CONCAT(id_customer_machine SEPARATOR ', ') as id_customer_machines
FROM customer_machines;

会输出你:

+-------------+----------------------+
| id_customer | id_customer_machines |
+------------------------------------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3, 5 |
+-------------+----------------------+

但是由于您需要对多个列进行分组,因此这对您没有帮助。根据您的情况,您有两个选择:

  1. 获取所有客户 ID,然后迭代它们,为每个 id_customer 获取客户计算机。更简单,但效率不高(numCustomers + 1 个查询)。
  2. 从数据库中获取纯数据并通过 PHP 从中生成结构化数组。高效,但需要更多编码。

关于php - mySQL PHP 查询将结果分组排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18014670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com