加载评论时加入查询

时间:2013-06-28 07:39:04

标签: php mysql sql

我正在为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>";
}

使用上面的代码,对于每个评论我正在创建一个新查询,这显然是错误的,我应该如何将第二个查询与第一个查询一起加入?

由于

3 个答案:

答案 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列表