这是我正在使用的选择语句。排序时会出现问题。当它像下面这样时,它只按 t2.userdb_user_first_name
排序,不管我把它放在第一位还是第二位。当我删除它时,它按 displayorder 字段值对排序得很好。所以我知道那部分工作正常,但不知何故,两者的结合导致 first_name
覆盖它。我想要的是首先按显示顺序对记录进行排序,然后是其中的 first_name
。
SELECT t1.userdb_id
FROM default_en_userdbelements as t1
INNER JOIN default_en_userdb AS t2 ON t1.userdb_id = t2.userdb_id
WHERE t1.userdbelements_field_name = 'newproject'
AND t1.userdbelements_field_value = 'no'
AND t2.userdb_user_first_name!='Default'
ORDER BY
(t1.userdbelements_field_name = 'displayorder' AND t1.userdbelements_field_value),
t2.userdb_user_first_name;
编辑:这是我想要完成的。我想列出 userdb 表中的用户(不是新项目),以及有关存储在 userdbelements 中的用户的详细信息。我希望首先按 userdbelements.displayorder
排序,然后按 userdb.first_name
排序。我希望这是有道理的?感谢您的快速帮助!
编辑:抱歉消失了,这里是一些示例数据
用户元素
userdbelements_id userdbelements_field_name userdbelements_field_value userdb_id
647 heat 1
648 displayorder 1 - Sponsored 1
645 condofees 1
用户数据库
userdb_id userdb_user_name userdb_emailaddress userdb_user_first_name userdb_user_last_name
10 harbourlights info@harbourlightscondosminium.ca Harbourlights 1237 Northshore Blvd, Burlington
11 harbourview info@harbourviewcondominium.ca Harbourview 415 Locust Street, Burlington
12 thebalmoral info@thebalmoralcondominium.ca The Balmoral 2075 & 2085 Amherst Heights Drive, Burlington
最佳答案
您正在尝试使用无效的 ORDER BY。
ORDER BY (t1.userdbelements_field_name = 'displayorder' AND t1.userdbelements_field_value)
它必须引用表列或返回的别名列。
我真的无法理解这个查询是如何可能的,因为你已经限制了 t1.userdbelements_field_name = newproject 然后您希望按等于 displayorder 的情况进行排序。
能否请您修改您的问题以准确说明您在 order by 子句中试图完成的是什么?
关于sql - 复杂的 MySQL Order by 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1859837/