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

我有两个用于注册外拨电话的表.

第一桌是人.该方案是:

-----------------------------------

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脚本中添加第一个查询的结果,但是有什么方法可以通过一个查询来完成?

解决方法:

您可以使用group_concat()和substring_index()通过以下MySQL技巧获得最后的注释:

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;

为此,您需要一个分隔符,该分隔符永远不会出现在注释中.为此,我选择了“ ^”.

标签:join,sql-order-by,sql,mysql,php

来源: https://codeday.me/bug/20191122/2059668.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值