我想根据用户的statut然后根据用户名来命令我的sql请求。法规由user_type
列设置:1 =有效,2 =无效,3 =创始人。
我会使用此请求来执行此操作,但它不起作用,因为我希望在“活动”成员中包含活动用户(1)和创建者(3):
SELECT user_type, callsign, username, vid, 0php_hub_chef.hub_id AS id_hub
FROM 0php_users
LEFT JOIN phpbb_users ON phpbb_id = phpbb_users.user_id
LEFT JOIN 0php_hub_chef ON 0php_hub_chef.user_id = phpbb_users.user_id
WHERE 0php_users.hub_id = 29
ORDER BY user_type <> 1, username_clean ASC
我想要这样的事情:ORDER BY user_type <> 1 and 3, username_clean ASC
有你的想法吗?
答案 0 :(得分:2)
您可以使用in
:
ORDER BY user_type in (1, 3) DESC,
username_clean ASC
在MySQL中,布尔表达式在整数上下文中被视为整数。如果user_type
为1或3,那么此计算结果为1,否则为0 - 因此desc
。
如果您不喜欢desc
,可以使用not in
:
ORDER BY user_type not in (1, 3), username_clean
答案 1 :(得分:1)
如果您不理解部分IF(user_type <> 1, 0, 1)
,则可以使用CASE
语句编写同一段代码,该语句更具可读性,如下所示。同样,您不必明确说出ASC
,因为这是默认的排序方向。
ORDER BY CASE WHEN user_type <> 1 THEN 0 ELSE 1 END, username_clean
基本上代码片段IF(user_type <> 1, 0, 1)
可以用伪代码编写,如
if(user_type != 1)
{
order by 0
}
else
{
order by 1
}
答案 2 :(得分:1)
请使用ORDER BY IF(user_type = 1, 0, 1) ASC, username_clean ASC
代替ORDER BY user_type <> 1, username_clean ASC
。
user_type
的值为1
(是活动成员)IF
- 函数返回1
。否则返回0
。 IF(user_type = 1, 1, 0)
的结果将用于排序结果。活动成员(user_type = 1)将位于结果的开头 - 后跟所有其他成员类型。
您可以在文档中找到有关MySQL IF
的更多信息:
https://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if