SELECT msg.msgFrom,
mem.memberID,
mem.memberFirstName,
mem.memberLastName,
msg.msgJobID,
msg.msgMessage,
msg.msgRead,
job.jobDescription
FROM messages msg JOIN members mem ON msg.msgFrom = mem.memberID
JOIN jobs job on msg.msgJobID = job.jobID
WHERE msgTo = ?
GROUP BY msgJobID
ORDER BY msg.msgRead DESC
我的MySQL语句中的ORDER BY
似乎不起作用。只是想知道是否有人可以帮助我。
由于
答案 0 :(得分:3)
您在这里无缘无故地使用分组。 GROUP BY
用于汇总(SUM
,MAX
,MIN
等)。
由于您不必要的分组,您无法按照您使用的字段进行排序。
另外,定义您的联接类型(良好实践)
请改为尝试:
SELECT msg.msgFrom,
mem.memberID,
mem.memberFirstName,
mem.memberLastName,
msg.msgJobID,
msg.msgMessage,
msg.msgRead,
job.jobDescription
FROM messages msg
INNER JOIN members mem
ON msg.msgFrom = mem.memberID
INNER JOIN jobs job
on msg.msgJobID = job.jobID
WHERE msgTo = ?
ORDER BY msgJobID, msg.msgRead DESC -- Use 2x order by's
答案 1 :(得分:1)
只是为了说明一个群体的影响, 给定
MariaDB [sandbox]> select * from person;
+-----------+-------+
| person_id | name |
+-----------+-------+
| 1 | Test1 |
| 2 | Test2 |
| 3 | Test3 |
+-----------+-------+
3 rows in set (0.00 sec)
MariaDB [sandbox]> select * from personroles;
+-----------+---------+
| person_id | role_id |
+-----------+---------+
| 1 | 1 |
| 1 | 2 |
| 2 | 3 |
| 2 | 1 |
| 3 | 1 |
+-----------+---------+
5 rows in set (0.00 sec)
on role_id上的一组返回3行(而不是6行),并且在代码的任何2次执行中,select语句中的其他列不能保证相同。
所以例如
MariaDB [sandbox]> select p.person_id,p.name,pr.role_id
-> from person p
-> join personroles pr on pr.person_id = p.person_id
-> group by pr.role_id ;
+-----------+-------+---------+
| person_id | name | role_id |
+-----------+-------+---------+
| 1 | Test1 | 1 |
| 1 | Test1 | 2 |
| 2 | Test2 | 3 |
+-----------+-------+---------+
3 rows in set (0.00 sec)
我怀疑你只需要JohnHC建议的订单。
答案 2 :(得分:0)
[...]如果[selected]列在功能上不依赖于GROUP BY 列[...]服务器可以自由选择每个组中的任何值,所以 除非它们相同,否则所选择的值是不确定的 可能不是你想要的。此外,选择价值观 通过添加ORDER BY子句不会影响每个组。 结果集排序在选择值和ORDER BY后发生 不会影响服务器选择的每个组中的哪个值。
我建议您在服务器上启用ONLY_FULL_GROUP_BY
,以使您的开发符合ANSI标准。它将节省您将来的时间,因为您的查询和您的SQL技能将在不同的dbms实现上变得更加可移植。