Pertanyaan utama dan subkueri - subkueri tidak mengembalikan hasil yang diingini
P粉505917590
P粉505917590 2023-07-24 15:42:03
0
1
326

我有以下用于评论系统的SQL查询。

SELECT `utama`.`comment_id`, `utama`.`komen`, `utama`.`cap masa`, `utama`.`replay_comment_id`, COUNT(`replay`.`comment_id`) SEBAGAI mainan semula DARIPADA `posts_comments` SEBAGAI `utama` KIRI SERTAI `posts_comments` SEBAGAI `replay` PADA `replay`.`replay_comment_id` = `main`.`comment_id` DI MANA `utama`.`post` = "107" DAN (`main`.`replay_comment_id` ADALAH NULL ATAU `main`.`comment_id` dalam ( PILIH `posts_comments`.`comment_id` DARI `posts_comments` DI MANA `posts_comments`.`replay_comment_id` = `main`.`comment_id` ) ) KUMPULAN OLEH `utama`.`comment_id` PERINTAH OLEH `utama`.`comment_id` ASC;

使用以下数据库结构和内部值:

|------ |Lajur|Jenis|Nol|Lalai |------ |//**komen_id**//|int(10)|Tidak| |post|int(10)|Tidak| |pengarang|int(10)|Tidak| |replay_comment_id|int(10)|Ya|NULL |cap waktu|int(10)|Tidak| |komen|varchar(200)|Tidak| == Lambakan data untuk posts_comments jadual |19|107|12|NULL|1688801931|ulasan 1 |20|107|12|NULL|1688801995|ulasan 2 |21|107|13|20|1688801995|uji 1 ulasan untuk ulasan 2 |22|107|12|20|1688801995|uji 2 ulasan untuk ulasan 2 |23|107|12|222|1688801995|uji 1 ulasan untuk ulasan lain

期望的结果将返回ID为19和20的评论,因为它们是主要评论,以及ID为21和以及ID为21和为为它们是主要评论,以及ID为21和为的记为 ID22的评不0的评论的子评论。不应返回ID为23的评论。现在的查询只返回主要评论。

在子查询中,如果我将main.comment_id_id/id_id我想要的结果,但是如果使用main.comment_id ,则无法得到结果,我无法理解为什么。对于任何评论和想法,将不胜感激。<

P粉505917590
P粉505917590

membalas semua (1)
P粉521013123

Kaedah ini tidak akan berfungsi. 19 dan 20 memenuhi main.replay_comment_id IS NULL, tetapi dalam subquery untuk 21, posts_comments.replay_comment_id = 19, ini tidak memberikan sebarang hasil. Oleh itu, subkomen 21 dan 22 tidak dipilih.

Sila semak pertanyaan berikut untuk melihat sama ada ia memberi anda hasil.


SELECT p1.`comment_id`, p1.`comment`, p1.`timestamp`, p1.`replay_comment_id`, ( CASE WHEN p1.`replay_comment_id` IS NULL THEN 1 WHEN p1.`replay_comment_id` IN (SELECT DISTINCT comment_id FROM posts_comments) THEN 1 ELSE 0 END ) relationFlg, SUM(1- ISNULL(p2.`comment_id`)) hasChild FROM `posts_comments` p1 LEFT JOIN `posts_comments` p2 ON p1.`comment_id` = p2.`replay_comment_id` GROUP BY 1 HAVING relationFlg = 1 ORDER BY 1 ;
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!