私のサイトにコメントセクションがあり、注文したい:
1.ユーザーがトップにコメントを固定している場合は、最初に表示するコメントが必要です
2.その後、私は
4.最後に、私はMySqlの複数の列によるコメントセクションの注文
とコメントの残りの部分をしたいブログを読んで、ユーザーによって行われたコメントをしたい
3.その後、ブログを書いたユーザーによって行われたコメントをしたいです私は各セクション(1〜4)を次の順序で並べ替えたい:
1.コメントのupvotes/downvotesに基づくスコアとh
------------------------------------------------
| pin | username | score | date comment posted |
------------------------------------------------
| 1 | Bob | 2 | 2017-01-25 13:45:01 | // First the pins ordered by Bob, Alice, score, date
------------------------------------------------
| 1 | Bob | 1 | 2017-06-12 18:42:54 |
------------------------------------------------
| 1 | Alice | 20 | 2017-03-21 12:51:42 |
------------------------------------------------
| 1 | Jack | 30 | 2015-02-27 12:58:32 |
------------------------------------------------
| NULL| Bob | 11 | 2016-11-21 10:41:35 | // Then Bob's (as writer of blog) comments ordered by score, date
------------------------------------------------
| NULL| Bob | 11 | 2016-10-30 23:56:01 |
------------------------------------------------
| NULL| Bob | 9 | 2017-12-24 12:00:00 |
------------------------------------------------
| NULL| Alice | 30 | 2017-04-21 13:48:05 | // Then Alice's (as reader of blog) comments ordered by score, date
------------------------------------------------
| NULL| Alice | 30 | 2016-12-01 15:37:12 |
------------------------------------------------
| NULL| Alice | 7 | 2017-05-21 11:12:11 |
------------------------------------------------
| NULL| Jack | 93 | 2012-12-21 00:00:00 | // Then all other comments ordered by score, date
------------------------------------------------
| 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 |
------------------------------------------------
.
.
.
(ボブはブログを書いて、アリスはそれを読んでいる):OW多くの回答(コメント=活性)コメントコメントをので、結果はこのようになるはずです
を投稿されました
2.日付を受け取っ
しかし、私が得た結果は、ピン/ NULLで正しく並べ替えられています...
しかし、ピンがORDER BYの最初のものであれば、ORDER BYの残りの部分(つまり、ピンBY ORDER、...)それはボブ、アリス、日付、スコアによって順序付け...
だから私以上の結果ではなく、次のようになり得る:なぜ
------------------------------------------------
| 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 comment.id AS commentID , comment.date AS cDate , comment.comment AS cComment , comment.pin AS cPin , comment.randomString AS cRandomString , commentuser.username AS cuUsername , commentuser.randomString AS cuRandomString , (SELECT COUNT(*) FROM commentvote AS commentvote WHERE commentvote.commentID = comment.id AND commentvote.voteUp = 1) AS cVoteUp , (SELECT COUNT(*) FROM commentvote AS commentvote2 WHERE commentvote2.commentID = comment.id AND commentvote2.voteDown = 1) AS cVoteDown , ((SELECT COUNT(*) FROM commentvote AS commentvoteup WHERE commentvoteup.commentID = comment.id AND commentvoteup.voteUp = 1) - (SELECT COUNT(*) FROM commentvote AS commentvotedown WHERE commentvotedown.commentID = comment.id AND commentvotedown.voteDown = 1) + (SELECT COUNT(*) FROM comment AS comment2 WHERE comment2.commentID = comment.id)) AS score FROM comment AS comment LEFT JOIN userlogininfo AS commentuser ON commentuser.id = comment.userID LEFT JOIN blog AS blog ON blog.randomString = ? INNER JOIN userlogininfo AS viewer ON viewer.randomString = ? INNER JOIN userlogininfo AS author ON author.id = blog.userID WHERE comment.blogID = blog.id AND comment.commentID IS NULL ORDER BY CAST(comment.pin AS UNSIGNED) DESC , CAST(author.id AS UNSIGNED) DESC , CAST(viewer.id AS UNSIGNED) DESC , CAST(score AS UNSIGNED) DESC , CAST(comment.date AS UNSIGNED) DESC
SELECT文を(読みやすい)
SELECT
comment.id AS commentID ,
comment.date AS cDate ,
comment.comment AS cComment ,
comment.pin AS cPin ,
comment.randomString AS cRandomString ,
commentuser.username AS cuUsername ,
commentuser.randomString AS cuRandomString ,
(
SELECT
COUNT(*)
FROM commentvote
AS commentvote
WHERE
commentvote.commentID = comment.id
AND commentvote.voteUp = 1
)
AS cVoteUp ,
(
SELECT
COUNT(*)
FROM commentvote
AS commentvote2
WHERE
commentvote2.commentID = comment.id
AND commentvote2.voteDown = 1
)
AS cVoteDown ,
(
(
SELECT
COUNT(*)
FROM commentvote
AS commentvoteup
WHERE
commentvoteup.commentID = comment.id
AND commentvoteup.voteUp = 1
)
- // minus
(
SELECT
COUNT(*)
FROM commentvote
AS commentvotedown
WHERE
commentvotedown.commentID = comment.id
AND commentvotedown.voteDown = 1
)
+ // plus
(
SELECT
COUNT(*)
FROM comment
AS comment2
WHERE
comment2.commentID = comment.id
)
)
AS score
FROM comment
AS comment
LEFT JOIN
userlogininfo
AS commentuser
ON
commentuser.id = comment.userID
LEFT JOIN
blog
AS blog
ON
blog.randomString = ?
INNER JOIN
userlogininfo
AS viewer
ON
viewer.randomString = ?
INNER JOIN
userlogininfo
AS author
ON
author.id = blog.userID
WHERE
comment.blogID = blog.id
AND comment.commentID IS NULL
ORDER BY
CAST(comment.pin AS UNSIGNED) DESC , // first order by pin/not-pin
CAST(author.id AS UNSIGNED) DESC , // then order each by author/not-author
CAST(viewer.id AS UNSIGNED) DESC , // then order not-author by viewer/rest
CAST(score AS UNSIGNED) DESC , // then order pin/author/viewer/rest by score
CAST(comment.date AS UNSIGNED) DESC // then order pin/author/viewer/rest/score by date
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 | userID | commentID | voteUp | voteDown |
-----------------------------------------------
| 1 | 2 | 3 | 1 | NULL |
-----------------------------------------------
| 2 | 4 | 3 | 1 | NULL |
-----------------------------------------------
| 3 | 3 | 2 | NULL | 1 |
-----------------------------------------------
| 4 | 2 | 2 | 1 | NULL |
-----------------------------------------------
.
.
.
ホープ誰かが助けることができる
---------------------------------------------------------------------------
| 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
---------------------------------------------------------------------------
.
.
.
commentvoteテーブル...事前のおかげで...
ピンをブール値のようなものですか?それはまたあなたの注文にあなたを助けるかもしれません... – Ivonet
こんにちは、ここであなたのサンプルデータとsqlfiddleです。残念ながら、クエリは実行されません。「パラメータ1に値が指定されていません」と表示されますが、それを修正できます:http://sqlfiddle.com/#!9/baae07/1 – biziclop
悲しいことに、 (ピンでもピンでもうまく注文できます...注文の順序でどこに置いてもスクロールが注文を引き継ぐので、それはうまくいきません) – APM