我想通过客户端1,2,3,然后再次客户端1,2,3等来订购我的结果.
有没有办法在不使用for循环或进行三次单独查询的情况下执行此操作?不仅如此,我正在使用分页数据,因此它需要返回x结果,但始终如一.
有任何想法吗?可能是GROUP BY?
client_id project_id project_name
---------- ---------- ------------
1 42 project abc
2 49 project xyz
3 41 project 123
1 22 project apple
2 29 project orange
3 21 project banana
解决方法:
采用:
SELECT x.client_id,
x.project_id,
x.project_name
FROM (SELECT t.client_id,
t.project_id,
t.project_name,
CASE
WHEN @client_id != t.client_id THEN @rownum := 0
WHEN @client_id = t.client_id THEN @rownum := @rownum + 1
ELSE @rownum
END AS rank,
@client_id := t.client_id
FROM TABLE t,
(SELECT @rownum := 0, @client_id
ORDER BY t.client_id) r) x
ORDER BY x.rank, x.client_id
MySQL没有任何排名功能,但幸运的是你可以使用变量.当client_id与先前的client_id不匹配时,关键是重置@rownum值 – 子查询中的ORDER BY是为了确保客户端有序.