一、分页查询时排序的字段重复,导致数据重复和丢失
原因:
如果列中的多个行具有相同的值ORDER BY,则服务器可以按任何顺序自由返回这些行,这些行的排序顺序相对于无序列是不确定的。
结论:
不能依赖MySQL的默认排序,排序的字段数据重复可以增加排序的字段,来提高排序的唯一性。
数据库内核月报 · MySQL Sort 分页
二、分组查询时,获取每组最新的一条记录。
场景:
查询撰稿人的最新文章
错误SQL:
a、只有pub_time这列的值取到最大的
SELECT id,title,create_user_id,MAX(pub_time) FROM m_author_article GROUP BY create_user_id
b、先排序后分组
SELECT * FROM (SELECT id,title,create_user_id,pub_time FROM m_author_article ORDER BY pub_time) AS temp GROUP BY create_user_id
同
SELECT id,title,create_user_id,pub_time FROM m_author_article GROUP BY create_user_id
结果相同,取该组中查询到的第一条记录。
实现SQL:
使用相关性子查询
SELECT id, title, create_user_id, pub_time FROM m_author_article t1 WHERE pub_time = (SELECT MAX(pub_time) FROM m_author_article WHERE create_user_id = t1.create_user_id)