Php MySql中按多列排序注释节

Php MySql中按多列排序注释节,php,mysql,Php,Mysql,我在我的网站上有一个评论部分,我希望排序为: 1.如果用户已将注释固定在顶部,我希望这些注释首先显示 2.然后我想要写博客的用户的评论 3.然后,我想要阅读博客的用户的评论 4.最后,我想听听其余的评论 我希望每个部分(1-4)的订购人: 1.根据其评论的上/下票数以及评论收到的回答数量(=评论活动)得出的分数 2.发表评论的日期 所以结果应该是这样的:(鲍勃写了博客,爱丽丝正在读) 但我得到的结果是按pin/NULL正确排序的… 但是,只要pin在ORDER BY中是第一位的,不管ORDER

我在我的网站上有一个评论部分,我希望排序为:
1.如果用户已将注释固定在顶部,我希望这些注释首先显示
2.然后我想要写博客的用户的评论
3.然后,我想要阅读博客的用户的评论
4.最后,我想听听其余的评论

我希望每个部分(1-4)的订购人:
1.根据其评论的上/下票数以及评论收到的回答数量(=评论活动)得出的分数
2.发表评论的日期

所以结果应该是这样的:(鲍勃写了博客,爱丽丝正在读)

但我得到的结果是按pin/NULL正确排序的…
但是,只要pin在ORDER BY中是第一位的,不管ORDER BY的其余部分的顺序是什么(即,ORDER BY pin,…),它都是按分数排序的,然后是Bob,然后是Alice,然后是date

我从上面得到的结果是这样的:

------------------------------------------------
| pin | username | score | date comment posted |
------------------------------------------------
| 1   | Jack     | 30    | 2015-02-27 12:58:32 | 
------------------------------------------------
| 1   | Alice    | 20    | 2017-03-21 12:51:42 |
------------------------------------------------
| 1   | Bob      | 2     | 2017-01-25 13:45:01 |
------------------------------------------------
| 1   | Bob      | 1     | 2017-06-12 18:42:54 |
------------------------------------------------
| NULL| Jack     | 93    | 2012-12-21 00:00:00 |
------------------------------------------------
| NULL| Jill     | 92    | 2015-04-08 15:45:29 |
------------------------------------------------
| NULL| Andrew   | 92    | 2014-12-31 19:45:12 |
------------------------------------------------
| NULL| Jack     | 32    | 2017-01-12 23:12:57 |
------------------------------------------------
| NULL| Alice    | 30    | 2017-04-21 13:48:05 |
------------------------------------------------
| NULL| Alice    | 30    | 2016-12-01 15:37:12 |
------------------------------------------------
| NULL| Bob      | 11    | 2016-11-21 10:41:35 |
------------------------------------------------
| NULL| Bob      | 11    | 2016-10-30 23:56:01 |
------------------------------------------------
| NULL| Bob      | 9     | 2017-12-24 12:00:00 |
------------------------------------------------
| NULL| Alice    | 7     | 2017-05-21 11:12:11 |
------------------------------------------------
.
.
.
为什么?我能做些什么来修复它?

信息,如果您需要它:

SELECT语句(复制/粘贴时未编辑)

SELECT语句(易于阅读)

userlogininfo表:

--------------------------------
| id | username | randomString |
--------------------------------
| 1  | Bob      | lkjsdf786dsf |
--------------------------------
| 2  | Jack     | 78dsauhkwhe7 |
--------------------------------
| 3  | Jill     | asd78687asyd |
--------------------------------
| 4  | Alice    | ua67asdsd87j |
--------------------------------
| 5  | Andrew   | sadf987dsf7s |
--------------------------------
.
.
.
博客表

------------------------------
| id | userID | randomString |
------------------------------
| 1  | 3      | sad86f7s8d67 |
------------------------------
| 2  | 1      | isuydf786iuh |
------------------------------
| 3  | 2      | 876sdfhgwegk |
------------------------------
.
.
.
注释表

---------------------------------------------------------------------------
| id | date | userID | blogID | commentID | pin | ... All info needed ... |
---------------------------------------------------------------------------
| 1  |<date>| 3      |  2     | NULL      | 1   |                         |
---------------------------------------------------------------------------
| 2  |<date>| 4      |  1     | 1         | NULL|                         | // is an answer to comment with id 1
---------------------------------------------------------------------------
.
.
.
希望有人能帮我,因为我被难住了。。。提前感谢…

试试这个:

ORDER BY pin DESC, FIELD(username, 'alice', 'bob') DESC, score DESC, date DESC
您只需将自动生成的列添加到votecount表中即可完成查询,该表将返回如下总数:

ALTER TABLE commentvote ADD COLUMN votes int GENERATED ALWAYS AS (voteUp-voteDown)

pin类似于布尔值,如果不将其设为0或1,则为iso NULL?这也可能有助于您的订购……您好,这里有一个SQLFIDLE示例数据。不幸的是,查询没有运行,它说
没有为参数1指定值,但也许您可以修复它:遗憾的是尝试了它。。。结果是一样的(同样它按pin/不按pin下单很好…因为不管我按订单的顺序放在哪里,scrore都会接管订单,所以其他的都会搞砸)请看@miknik请发布作为答案,这样这个评论部分就不会变成一个讨论论坛。。。plu刚刚尝试了所有可能的grupy元素排序,他们给出了不同的结果。。。但不是对的…对不起。。。得分仍然会把事情搞砸,重新排序。。。我以前的解决方案是用户创建的pin=3。。。那么1。将作者编写的pin(pin!=3)更新为2,将查看器编写的pin(pin!=3)更新为1。。。然后2。查询-按pin描述、分数描述、日期描述的订单。。。最后将1或2的管脚更新回NULL。。。按照我的要求排序结果-首先显示用户的评论(pin3)-然后是作者的评论(pin2)-然后是查看者的评论(pin1)-最后按分数排序,如果相同,则按日期排序。。。但是,虽然这是一种非常好的编码方式,但它的输出与您期望的结果完全一样,而不是我的坏。。。当我测试它的时候。。。我不能使用username作为字段,因为名称来自两个不同的左连接-因此我切换到author和viewer的userID,因为它来自同一个源(并且做相同的事情-即识别用户-甚至比username更好)。。。但在深夜和匆忙中,我意外地使用了id(如在comment.id中)来代替。。。仍然给我留下不可靠的结果呵呵。。。晚上睡个好觉,然后再次测试(现在使用userID-duh),效果非常好。。。所以,谢谢你们,投票表决,被接受的答案是你们的:D
---------------------------------------------------------------------------
| id | date | userID | blogID | commentID | pin | ... All info needed ... |
---------------------------------------------------------------------------
| 1  |<date>| 3      |  2     | NULL      | 1   |                         |
---------------------------------------------------------------------------
| 2  |<date>| 4      |  1     | 1         | NULL|                         | // is an answer to comment with id 1
---------------------------------------------------------------------------
.
.
.
-----------------------------------------------
| id | userID | commentID | voteUp | voteDown |
-----------------------------------------------
| 1  | 2      | 3         | 1      | NULL     |
-----------------------------------------------
| 2  | 4      | 3         | 1      | NULL     |
-----------------------------------------------
| 3  | 3      | 2         | NULL   | 1        |
-----------------------------------------------
| 4  | 2      | 2         | 1      | NULL     |
-----------------------------------------------
.
.
.
ORDER BY pin DESC, FIELD(username, 'alice', 'bob') DESC, score DESC, date DESC
ALTER TABLE commentvote ADD COLUMN votes int GENERATED ALWAYS AS (voteUp-voteDown)