[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подсчет кол-ва комментариев к заметке
m4a1fox
Доброго времени суток уважаемые эксперты. Может кто подскажет, как правильно составить запрос на вывод кол-ва комментариев. Вот собствнно сам запрос
$r = mysql_query("SELECT `you_mail`.`title`, `you_mail`.`text`, 
`you_mail`.`date`, `you_mail`.`time`,
`you_mail`.`view`, `you_mail`.`author`,
`comment`.`name` FROM `you_mail`
LEFT JOIN `comment` ON `comment`.`id_mail` = `you_mail`.`id`
WHERE `you_mail`.`id` ='"
.(int)$view."'
ORDER BY `you_mail`.`date` DESC"
) or die("Ошибка -".mysql_error());
while($d = mysql_fetch_assoc($r))
{
echo '
<table border="0" cellpadding="0" cellspacing="0"><tr><td><div class="underline">
<div class="underline_text">'
.$d['title'].'</div>
</div></b></td></tr>
<tr><td>'
.$d['text'].'</td></tr>
<tr><td><p class="post_adds"><img src="img/date.png"
align="top"> '
.$d['date'].' | <img src="img/time.png"
align="top"> '
.$d['time'].' | <img src="img/view.png"
align="top"> '
.$d['view'].' | <img src="img/author.png" align="top"> 
Автор: '
.htmlspecialchars($d['author']).'</p>'.$d['name'].'
</td></tr></table>
'
;
}
echo("<hr />");
?>
спасибо.



Спустя 7 минут, 26 секунд (9.01.2011 - 16:57) Invis1ble написал(а):
SELECT COUNT(*)...

Спустя 15 секунд (9.01.2011 - 16:58) m4a1fox написал(а):
Запрос дублирует записи, если к одно заметке относится более одного коммента, то он выводит опять эту заметку, т. е. дублирует, соответственно если 3 - то 3 раза дублирует!

Спустя 1 минута, 52 секунды (9.01.2011 - 17:00) m4a1fox написал(а):
Вместо while - if поставить можно?! Не будет ли это ошибкой?!

Спустя 1 минута, 47 секунд (9.01.2011 - 17:01) m4a1fox написал(а):
нет. if не катит! Надо что то думать!?

Спустя 3 минуты, 57 секунд (9.01.2011 - 17:05) m4a1fox написал(а):
Invis1ble
И куда поставить SELECT COUNT(*)?

Спустя 3 минуты, 48 секунд (9.01.2011 - 17:09) m4a1fox написал(а):
Invis1ble
Можно конечно и так сделать
'.count($d['id']).'
ну тогда как заставить скрипт выводить заметку только один раз?

Спустя 2 минуты, 13 секунд (9.01.2011 - 17:11) Invis1ble написал(а):
m4a1fox
я не совсем тебя понимаю.... Если тебе нужно получить кол-во записей, удовлетворяющих условиям (ON `comment`.`id_mail` = `you_mail`.`id` и WHERE `you_mail`.`id` ='".(int)$view."'), то в данном случае нужно mysql_num_rows($r)

Спустя 2 минуты, 8 секунд (9.01.2011 - 17:13) m4a1fox написал(а):
Invis1ble
Сейчас попробую. Но функция посчитает кол-во строк в таблице you_mail, а мне надо в табл. comment where you_mail.id = comment.id_mail, или я ошибся?

Спустя 2 минуты, 20 секунд (9.01.2011 - 17:16) m4a1fox написал(а):
Invis1ble
Спасибо. Вроде пока работает! Тем не менее не понимаю почему он считает строки из таб. comment а не из you_mail? не ужели дело вот в этой строчке?
`comment`.`id_mail` = `you_mail`.`id`
????

Спустя 5 минут, 13 секунд (9.01.2011 - 17:21) Invis1ble написал(а):
m4a1fox
потому что передается аргумент $r (идентификатор ресурса) в функцию, который указывает на предыдущий запрос

Спустя 1 минута, 8 секунд (9.01.2011 - 17:22) Invis1ble написал(а):
т.е. функция возвращает кол-во строк, извлеченных тем запросом

Спустя 37 секунд (9.01.2011 - 17:23) m4a1fox написал(а):
Invis1ble
А если использовать while?

Спустя 4 минуты, 23 секунды (9.01.2011 - 17:27) Invis1ble написал(а):
m4a1fox
ну используй, если нужно. А перед циклом $count = mysql_num_rows($r);

Спустя 22 секунды (9.01.2011 - 17:27) m4a1fox написал(а):
Invis1ble
Просто это страница с выводом полной заметки, а есть еще страница с выводом кратких заметок. На странице отображаются все заметки из таблицы you_mail. Вот мне бы хотелось вот на этой странице, отображать кол-во комментариев к той или иной заметки. И там я использовал while а не if. Как быть в таком случае? Вот код вывода заметки
$res = mysql_query("SELECT `id`, `title`, `date`, `text`, `time`, `view` 
FROM `you_mail`
WHERE `hide`='show'
ORDER BY `id`
DESC LIMIT "
. (($page - 1) * $num) .", ". $num);

if(mysql_num_rows($res) > 0)
while($row = mysql_fetch_assoc($res))
{
$desc = strip_tags($row['text']);
$description = substr($desc, 0, 300);
echo '<br /><table class="post" border="0" cellpadding="0" cellspacing="0" style="background-color: white;"><tr>
<td class="post_title" colspan=2 style="padding-left: 10px; padding-top: 10px;">
<p class="post_name">
<a href=page_view_you_mail.php?view='
.(int)$row['id'].'></p>
<img src="img/look.png" align="top"> '
.$row['title'].'</a>
</p>
<p class="post_adds">
<img src="img/date.png" align="top"> '
.$row['date'].'</p>
<p class="post_adds"> </p></td>
</tr>

<tr>
<td align="left" colspan=2 style="padding: 5 5px">
'
.html_entity_decode($description,ENT_QUOTES).'...
</td></tr>
<tr><td colspan=2>
<a href=page_view_you_mail.php?view='
.$row['id'].'>
<img align=right src="img/next.png" onmouseover="this.src=
\'img/next_hover.png\'" onmouseout="this.src=\'img/next.png\'"></a>
</td></tr>

<tr>
<td class="post_title">
<p class="post_adds" align="left"><img src="img/time.png" align="top">'
.$row['time'].'</p></td>
<td class="post_title"><p class="post_adds" align="right">
<img src="img/view.png" align="top"> Просмотров: '
.$row['view'].'
</p></td>
</tr></table>'
;
}?>
может подскажите?

Спустя 7 минут, 3 секунды (9.01.2011 - 17:34) m4a1fox написал(а):
Invis1ble
Не получается while - тогда одна заметка выводится столько раз - сколько у нее комментов. А если if - то она выводится один раз, и подсчет комментов - правильный!

Спустя 3 минуты, 47 секунд (9.01.2011 - 17:38) Invis1ble написал(а):
m4a1fox
Цитата
отображать кол-во комментариев к той или иной заметки

формируешь в цикле запросы с нужными условиями, только делаешь "SELECT COUNT(*) ..." и дальше получаешь результаты этих запросов с помощью mysql_result($result, 0)

Спустя 46 секунд (9.01.2011 - 17:39) Invis1ble написал(а):
m4a1fox
Цитата
Не получается while - тогда одна заметка выводится столько раз - сколько у нее комментов. А если if - то она выводится один раз, и подсчет комментов - правильный!

покажи код с while

Спустя 8 минут, 14 секунд (9.01.2011 - 17:47) m4a1fox написал(а):
Invis1ble
Спасибо. Буду пробовать, хотя для меня это реально сложно!?)

Спустя 1 минута, 1 секунда (9.01.2011 - 17:48) m4a1fox написал(а):
<?php
$r = mysql_query("SELECT `you_mail`.`title`, `you_mail`.`text`, `you_mail`.`date`,
`you_mail`.`time`, `you_mail`.`view`, `you_mail`.`author`,
`comment`.`id` FROM `you_mail`
LEFT JOIN `comment` ON `comment`.`id_mail` = `you_mail`.`id`
WHERE `you_mail`.`id` ='"
.(int)$view."'
ORDER BY `you_mail`.`date` DESC"
) or die ("Ошибка -".mysql_error());
$cnt = mysql_num_rows($r);
while($d = mysql_fetch_assoc($r))
{
echo '
<table border="0" cellpadding="0" cellspacing="0">
<tr><td>
<div class="underline">
<div class="underline_text">'
.$d['title'].'</div>
</div></b>
</td></tr>
<tr><td>'
.$d['text'].'</td></tr>
<tr><td><p class="post_adds">
<img src="img/date.png"
align="top"> '
.$d['date'].' | <img src="img/time.png"
align="top"> '
.$d['time'].' | <img src="img/view.png"
align="top"> '
.$d['view'].' | <img src="img/author.png" align="top"> 
Автор: '
.htmlspecialchars($d['author']).
Комментариев: '
.$cnt.'</p></td></tr></table>
'
;
}
echo("<hr />");
?>

Спустя 9 минут, 57 секунд (9.01.2011 - 17:58) Invis1ble написал(а):
m4a1fox
а, теперь я походу понял, в чем у тебя проблема..... Ну вобщем тогда
Цитата
формируешь в цикле запросы с нужными условиями, только делаешь "SELECT COUNT(*) ..." и дальше получаешь результаты этих запросов с помощью mysql_result($result, 0)


Спустя 9 минут, 13 секунд (9.01.2011 - 18:07) m4a1fox написал(а):
Invis1ble
Так все таки if использовать или вернуться к while?

Спустя 9 минут, 52 секунды (9.01.2011 - 18:17) m4a1fox написал(а):
Invis1ble
Я по другому сделал.) И вроде пока все работает?!
$com = mysql_query("SELECT `comment`.`id`, `comment`.`id_mail`, `you_mail`.`id` 
FROM `comment`
LEFT JOIN `you_mail` ON `you_mail`.`id` = `comment`.`id_mail`
WHERE `comment`.`id_mail` = '"
.$row['id']."'
"
)
or die ("Ошибка -". mysql_error());
if($cnt = mysql_num_rows($com ))
{
запрос в запросе. Не знаю насколько правильно. Но он работает! Спасибо за подсказки и помощь!?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.