我正在为id ='3'
的产品加载评论$get_comments = mysql_query("SELECT * FROM products_comments WHERE product_id = '3'");
现在我想为每条评论添加“举报滥用行为”选项,为此,我有另一个表格为“abuse_reports
”,用户滥用举报将存储在此表中,现在如果是用户报道了一条评论,report abuse
选项不应该出现那个用户的评论,因为我正在这样做:
while($row = mysql_fetch_array($get_comments)){
echo blah blah blah // comment details
// now for checking if this user should be able to report this or not, i make this query again:
$check_report_status = mysql_query("SELECT COUNT(id) FROM abuse_reports WHERE reporter_user_id = '$this_user_id' AND product_id = 'this_product_id'");
// blah blah count the abuse reports which the current user made for this product
if($count == 0) echo "<a>report abuse</a>";
}
使用上面的代码,对于每个评论我正在创建一个新查询,这显然是错误的,我应该如何将第二个查询与第一个查询一起加入?
由于
答案 0 :(得分:1)
更新了查询(现在正在使用,由提问者提交)
SELECT pc. * , count( ar.`id` ) AS `abuse_count`
FROM `products_comments` pc
LEFT OUTER JOIN `abuse_reports` ar ON pc.`id` = ar.`section_details`
AND ar.`reporter_id` = '$user_id'
WHERE pc.`product_id` = '$product_id'
GROUP BY pc.`id`
LIMIT 0 , 30
该查询的工作方式如下:您使用给定的products_comments
选择product_id
的所有字段,但您还要计算给定abuse_reports
的{{1}}条目。现在您product_id
LEFT JOIN
,这意味着您访问该表并将其挂在左侧(您的products_comments表)。 OUTER允许abuse_reports表中不需要值,因此如果没有报告,则为null,因此计数为0.
请阅读:
但是,我需要对结果进行分组,否则您只得到一个合并的行。因此,请使用abuse_reports
products_comments
类型的comment_id
字段int
扩展您的primary key
。
更新:滥用次数 现在您可以做两件事:通过循环结果,您可以看到每个单个元素是否已被该用户报告(例如,您可以隐藏滥用报告链接)。如果您想要报告的总数,只需增加一个在循环外声明的计数器变量。像这样:
auto_increment
只是一个原始样本
答案 1 :(得分:0)
我相信你正在寻找像这样的查询。
SELECT pc.*, COUNT(ar.*)
FROM products_comments AS pc
LEFT JOIN abuse_reports AS ar ON reporter_user_id = pc.user_id AND ar.product_id = pc.product_id
WHERE product_id = '3'"
答案 2 :(得分:0)
试试这个SQL
SELECT pc.*, COUNT(ar.id) AS abuse_count
FROM products_comments pc
LEFT JOIN abuse_reports ar ON pc.product_id = ar.product_id
WHERE pc.product_id = '3' AND ar.reporter_user_id = '$this_user_id'
GROUP BY pc.product_id
如果对于reporter_user_id存在,则结果是具有abuse_reports计数的products_comments列表