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)