<p>システムの評価に使用される以下の SQL があります。</p>
<pre class="brush:php;toolbar:false;">SELECT
`メイン`.`コメントID`、
`メイン`.`コメント`、
`メイン`.`タイムスタンプ`、
`main`.`replay_comment_id`、
COUNT(`replay`.`comment_id`) AS リプレイ
FROM `posts_comments` AS `main`
LEFT JOIN `posts_comments` AS `replay` ON `replay`.`replay_comment_id` = `main`.`comment_id`
どこ
`main`.`post` = "107" AND (`main`.`replay_comment_id` IS NULL OR `main`.`comment_id` in ( SELECT
`posts_comments`.`comment_id`
から
`posts_comments`
どこ
`posts_comments`.`replay_comment_id` = `main`.`comment_id` ) )
グループ化
`メイン`.`コメントID`
注文方法
`main`.`comment_id` ASC;</pre>
<p>以下のデータベース構造と内部値を使用します:</p>
<pre class="brush:php;toolbar:false;">|------
|列|タイプ|NULL|デフォルト
|------
|//**コメントID**//|int(10)|いいえ|
|post|int(10)|いいえ|
|著者|int(10)|いいえ|
|replay_comment_id|int(10)|はい|NULL
|タイムスタンプ|int(10)|いいえ|
|コメント|varchar(200)|いいえ|
== テーブルposts_commentsのデータをダンプしています
|19|107|12|NULL|1688801931|コメント 1
|20|107|12|NULL|1688801995|コメント 2
|21|107|13|20|1688801995|コメント 2 に対するコメント 1 をテスト
|22|107|12|20|1688801995|コメント 2 に対するテスト 2 コメント
|23|107|12|222|1688801995|他のコメント用に 1 件のコメントをテスト</pre>
期待される結果は、ID 19 と 20 の認証は主認証であるため返され、ID 21 と 22 の認証は ID 20 の認証の子認証であるため返されません。 </p><p> サブコメントで、main.comment_id を 20 に置き換えれば、期待どおりの結果が得られますが、main.comment_id を使用する場合は、 </p>これは結果が得られず、どのような検証やアイデアに対しても刺激を与えるものではないことを理解していません。
この方法は機能しません。 19 と 20 は main.replay_comment_id IS NULL を満たしますが、21 のサブクエリでは、posts_comments.replay_comment_id = 19 となり、結果が得られません。したがって、サブコメント 21 と 22 は選択されませんでした。
次のクエリをチェックして、結果が得られるかどうかを確認してください。
リーリー