2013-06-28 2 views
1

я загружаю комментарии для продукта с 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>"; 
} 

С приведенным выше кодом для каждого комментария я создаю новую очередь ry, и это, очевидно, неправильно, как я должен присоединиться к второму запросу с первым?

Thanks

ответ

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 для данного product_id. Теперь вы LEFT JOINabuse_reports, что означает, что вы получаете доступ к этой таблице и вешаете ее слева (таблица products_comments). OUTER допускает, что нет никакой необходимости для значения в таблице abuse_reports, поэтому, если нет отчета вы получаете нулевой, и поэтому подсчет 0.

Пожалуйста, прочитайте это: Однако, мне нужно сгруппировать результаты, иначе вы получите только одну объединенную строку. Поэтому, пожалуйста, заполните products_comments полем comment_id типа int, которое является primary key и имеет auto_increment.

UPDATE: число злоупотреблений Теперь вы можете сделать две вещи: по пробегаем по результатам, вы можете увидеть, для каждого отдельного элемента, если оно было сообщено этим пользователем или нет (что, как вы можете скрыть ссылки отчет о нарушении например). Если вы хотите общее количество отчетов, вы просто увеличиваете переменную счетчика, которую вы объявляете вне цикла. Как это:

$abuse_counter = 0; 
while($row = mysql....) 
{ 
    $abuse_counter += intval($row['abuse_count']); // this is 1 or 0 
    // do whatever else with that result row 
} 

echo 'The amount of reports: '.$abuse_counter; 

Только примитивный образец

+0

это не имеет комментариев для product_id = 3 – behz4d

+0

Прошу прощения, я обновил запрос в своем ответе выше - он работает сейчас, я сам тестировал его. Это было ошибкой в ​​предложении 'WHERE', так как' reporter_user_id' может быть не всегда доступным (так что это должно было быть в 'ON').Надеюсь, что это сработает для вас сейчас, пожалуйста, дайте мне знать;) – Francodi

+0

там, кажется, что-то не так, просто загружается 1 комментарий, а для product_id = 3 комментариев более 10, а для других продуктов он ничего не загружает! – behz4d

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'" 
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 

В результате список products_comments с abuse_reports засчитан, если существуют reporter_user_id

+0

результат должен быть все комментарии для product_id = 3, а также иметь доступ к числу отчетов нарушений, представленных на этот продукт этого пользователя, это не работает ... – behz4d