Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP首先对非空组列表进行排序,然后对空组进行排序_Php_Mysql - Fatal编程技术网

PHP首先对非空组列表进行排序,然后对空组进行排序

PHP首先对非空组列表进行排序,然后对空组进行排序,php,mysql,Php,Mysql,给出两个表格: item_to_group ---> contain item_id , user_to_group_id user_to_group ---> contain user_to_group_id , user_id, // other not relevant columns like group name... 下面是我的mysql代码: SELECT *, (SELECT COUNT(*) FROM item_to_group x WHERE x.user_

给出两个表格:

item_to_group ---> contain item_id , user_to_group_id
user_to_group ---> contain user_to_group_id , user_id, // other not relevant columns like group name...
下面是我的mysql代码:

SELECT *,
(SELECT COUNT(*)  FROM item_to_group x 
WHERE x.user_to_group_id = u.user_to_group_id) as tots
FROM  user_to_group u
WHERE u.user_id = // [ USERID HERE ]
ORDER BY  u.user_to_group_id DESC, tots DESC
我正试图显示一个组列表,在列表的顶部是包含项目的组,然后是空组

想象一下,这些群体就像电子商务中的愿望清单一样。作为一个用户,我可以建立多个组

例如。 目前我显示

group 99 contains 2 items
group 98 contains 0 items // <--- empty
group 97 contains 5 items
group 96 contains 1 items
group 94 contains 0 items // <--- empty
group 93 contains 9 items
group 92 contains 3 items
因此,我想先按时间顺序(我不存储时间戳,但组id应该足够了)显示非空组,然后按时间顺序显示空组列表的所有其余部分

这里的问题是,如果我按id排序,那么totsi不会得到我想要的结果。
我希望我说得很清楚。

您想在您的
ORDER BY
子句的第一个位置的附加列上排序(以使其最相关)。您不能直接在
tots
上排序,因为这会破坏
user\u to\u group\u id
上的排序。因此,您需要将除0以外的所有
tot
值映射到单个值,例如1。这可以使用
案例
,给出以下
ORDER BY
子句来完成:

ORDER BY CASE WHEN tots = 0 THEN 0 ELSE 1 END DESC
       , u.user_to_group_id DESC
       , tots DESC
现在,那些拥有
tots
0的人将排名第一,然后是那些
tots
=0的人。其余的排序是相同的


如果您想了解更多有关
案例的信息,请阅读我在这里写的一篇文章:

您想在
ORDER BY
子句的第一个位置的附加列上排序(以使其最相关)。您不能直接在
tots
上排序,因为这会破坏
user\u to\u group\u id
上的排序。因此,您需要将除0以外的所有
tot
值映射到单个值,例如1。这可以使用
案例
,给出以下
ORDER BY
子句来完成:

ORDER BY CASE WHEN tots = 0 THEN 0 ELSE 1 END DESC
       , u.user_to_group_id DESC
       , tots DESC
现在,那些拥有
tots
0的人将排名第一,然后是那些
tots
=0的人。其余的排序是相同的


如果您想了解更多关于
CASE
的信息,请看我在这里写的一篇文章:

您可以添加一个示例输出吗?我不清楚你想要什么。你为什么要先按id排序?那么按时间顺序应该放在哪里呢?@lserni好的,我添加了这个示例,谢谢您添加一个示例输出?我不清楚你想要什么。你为什么要先按id排序?那么按时间顺序应该放在哪里呢?@lserni好的,我添加了这个例子,谢谢