gpt4 book ai didi

php - 来自两个表的 SQL 查询按两个表列排序结果

转载 作者:可可西里 更新时间:2023-11-01 08:17:40 25 4
gpt4 key购买 nike

我有两个表用于注册拨出电话。

第一张 table 是。该方案是:

-----------------------------------
id | fname | lname | phone_number |
-----------------------------------
1 | John | Black | 132333312 |
2 | Marry | White | 172777441 |
-----------------------------------

第二个表称为调用。该方案是:

----------------------------------------------------------------------
id | scr_phone | dst_phone | dst_public_id | date | notes |
----------------------------------------------------------------------
1 | 555 | 132333312 | 1 | 1.12.2013 | chit-chat |
2 | 555 | 172777441 | 2 | 1.12.2013 | serios talk |
3 | 555 | 172777441 | 2 | 2.12.2013 | conversation|
----------------------------------------------------------------------

我不是按字母顺序而是按通话频率为用户显示电话列表。因此,无论谁从本地电话 555 调用,都会在顶部看到他/她经常调用的人。这是我使用的 MySQL 查询:

SELECT p.fname, p.lname, c.notes, COUNT(c.dst_public_id) AS amount
FROM people p
JOIN calls c ON c.dst_public_id = p.id
WHERE phones != ''
GROUP BY p.id
ORDER BY amount DESC, p.lname ASC

结果,我在电话列表的顶部找到了第 2 个人,而第 1 个人排在第二位(我计算了每个公众有多少电话,并按该数量排序)。查询结果如下:

--------------------------------
fname | lname | notes | amount |
--------------------------------
Marry | White | | 2 |
John | Black | | 1 |
--------------------------------

这一切都很好。但我想始终显示与该人最后一次交谈时所做的最后记录。我可能可以为每个请求每个人的最后记录并从中获取数据的人进行完全独立的 MySQL 查询,例如:

SELECT notes FROM calls WHERE dst_public_id = 2 ORDER BY date DESC LIMIT 1

...然后在我的 PHP 脚本中添加第一个查询的结果,但是有什么方法可以用一个查询来完成吗?

最佳答案

您可以通过以下 MySQL 技巧获取最后一个音符,使用 group_concat()substring_index():

SELECT p.fname, p.lname, c.notes, COUNT(c.dst_public_id) AS amount,
substring_index(group_concat(notes order by id desc separator '^'), '^', 1) as last_notes
FROM people p JOIN
calls c
ON c.dst_public_id = p.id
WHERE phones != ''
GROUP BY p.id
ORDER BY amount DESC, p.lname ASC;

为此,您需要一个永远不会出现在注释中的分隔符。为此,我选择了 '^'

关于php - 来自两个表的 SQL 查询按两个表列排序结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20306102/

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