gpt4 book ai didi

mysql - 一份声明中包含两个限制条款?

转载 作者:行者123 更新时间:2023-11-29 12:49:47 25 4
gpt4 key购买 nike

我正在尝试构建一个产品评论页面,用户可以在其中评论任何提交的评论,例如亚马逊。我希望页面显示 3 个用户评论以及对每条评论的 2 条回复(如果存在)。

这是table

CREATE TABLE product_review
(`ID` int, `username` varchar(21), `review_title` varchar(30), `review_or_reply` int)
;

INSERT INTO product_review
(`ID`, `username`, `review_title`, `review_or_reply`)
VALUES
(1, 'Tom', 'Rip-off', 0),
(2, 'Peter', 'Rip-off', 1),
(3, 'May', 'Rip-off', 1),
(4, 'June', 'Rip-off', 1),
(5, 'Tommy', 'Worth the Price', 0),
(6, 'Sammy', 'Worth the Price', 1),
(7, 'Sam', 'Worth the Price',1),
(8, 'Bryan','Worth the Price',1),
(9, 'Sally', 'Average Product', 0)
;

review_or_reply 字段实际上是 Yes 或 No 字段,其中 0 表示这是一条评论,1 是其他用户对该评论的评论。

是否有一个 select 语句可以限制 3 个评论并提出其中的两个评论?例如:

Select `username`,`review_title`,`reply` from product_review where review_or_reply ='0' Limit 3
Select `username`,`review_title`,`reply` from product_review where review_or_reply = '1' and title = 'Rip-off' Limit 2
Select `username`,`review_title`,`reply` from product_review where review_or_reply = '1' and title = 'Worth the Price' Limit 2
Select `username`,`review_title`,`reply` from product_review where review_or_reply = '1' and title = 'Average Product' Limit 2

我希望输出是这样的:

username   review_title     review_or_reply
Tom Rip-off 0
Peter Rip-off 1
May Rip-off 1
Tommy Worth the Price 0
Sammy Worth the Price 1
Sam Worth the Price 1
Sally Average Product 0

最佳答案

这将返回 3 个 review_titles,然后提取两个对此的回复

SELECT 
pr.*,
IF( @A = t.review_title,
IF(@B = 3, @B := 1, @B := @B +1)
, @B
) AS group_col,
@A := t.review_title
FROM (
SELECT
id,
username,
review_title
FROM product_review
WHERE reply ='0' LIMIT 3
) t
JOIN product_review pr ON pr.review_title=t.review_title
CROSS JOIN (SELECT @A := "", @B := 1) AS temp
GROUP BY group_col, review_title
ORDER BY id;
<小时/>

编辑:

如果数据库中多个回复为 0,则此查询将检查这一点。 (因为您确实在其他查询中指定回复必须为 1)。

INSERT INTO product_review
(`ID`, `username`, `review_title`, `reply`)
VALUES
(1, 'Tom', 'Rip-off', 0),
(2, 'Peter', 'Rip-off', 1),
(3, 'May', 'Rip-off', 0),
(4, 'June', 'Rip-off', 1),
(5, 'Tommy', 'Worth the Price', 0),
(6, 'Sammy', 'Worth the Price', 1),
(7, 'Sam', 'Worth the Price',1),
(8, 'Bryan','Worth the Price',1),
(9, 'Sally', 'Average Product', 0),
(10, 'Timothy', 'Rip-off', 1)

注意,在 id 3 处有一个回复 0,在 id 10 处有一个回复 1。此查询将正确地跳过回复 = 0。

SELECT 
pr.*,
IF( @A = t.review_title,
IF(pr.reply = 0, 1,
IF(@B = 3, @B := 1, @B := @B +1)
), @B
) AS group_col,
@A := t.review_title
FROM (
SELECT
DISTINCT
id,
username,
review_title
FROM product_review
WHERE reply ='0'
GROUP BY review_title
LIMIT 3
) t
JOIN product_review pr ON pr.review_title=t.review_title
CROSS JOIN (SELECT @A := "", @B := 1) AS temp
GROUP BY group_col, review_title
ORDER BY id;

DEMO

关于mysql - 一份声明中包含两个限制条款?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24936690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com