这是我正在使用的select语句。排序时会出现问题。当它如下所示时,它只按t2.userdb_user_first_name
排序,如果我把它放在第一个或第二个并不重要。当我删除它时,它可以通过displayorder字段值对进行排序。所以我知道这部分是有效的,但不知何故,两者的结合导致first_name
覆盖它。我想要的是首先按照displayorder对记录进行排序,然后在其中进行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
userdbelements_id userdbelements_field_name userdbelements_field_value userdb_id
647 heat 1
648 displayorder 1 - Sponsored 1
645 condofees 1
USERDB
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
答案 0 :(得分:0)
您正在尝试使用无效的ORDER BY。
ORDER BY (t1.userdbelements_field_name = 'displayorder' AND t1.userdbelements_field_value)
它必须引用表列或返回的别名列。
我真的无法理解这个查询是如何实现的,因为你已经有限了 t1.userdbelements_field_name = newproject ,然后您希望在等于 displayorder 的情况下订购。
您能否修改一下您的问题,准确说明您要按照订单条款完成的目的是什么?
答案 1 :(得分:0)
根据我的理解,您必须仅为default_en_userdbelements
值加入displayorder
。但是,我怀疑您的查询有问题,并且它可能会返回userdb_id
的重复值。
也许你应该说出你想要实际做的事情,而不是解释你尝试这样做的方式。
SELECT t1.userdb_id
FROM default_en_userdbelements AS t1
JOIN default_en_userdb AS t2 ON t1.userdb_id = t2.userdb_id
JOIN default_en_userdbelements AS o ON (o.userdb_id, o.userdbelements_field_name)
= (t1.userdb_id, 'displayorder')
WHERE t1.userdbelements_field_name = 'newproject'
AND t1.userdbelements_field_value = 'no'
AND t2.userdb_user_first_name != 'Default'
ORDER BY o.userdbelements_field_value,
t2.userdb_user_first_name
答案 2 :(得分:0)
你可以这样做:
ORDER BY
(CASE WHEN t1.userdbelements_field_name = 'displayorder'
THEN t1.userdbelements_field_value
ELSE $some_large_number
END),
t2.userdb_user_first_name;
在t1.userdbelements_field_value
时使用t1.userdbelements_field_name = 'displayorder'
的值进行排序,但您必须提供相同类型的其他值才能申请ELSE
。