Проблема такова: У меня на страницу выводится в цикле таблица поста, которых на странице по 3! В каждом посте есть такое поле как кол-во комментариев. Дак вот встретил проблему подсчета кол-ва комментов для каждого поста. Таблица комментов содержит поля: id_video, kat, text. id-video - id этого поста в таблице, где хранятся посты. Подсчет комментов делаю так: PHP: <? $sum_comment_id = mysql_query("SELECT COUNT(*) FROM comments WHERE id_video='$id' and kat='$kat'",$db); $sum_comment_id = mysql_fetch_array($sum_comment_id); echo $sum_comment_id[0]; ?> так вот проблема, как мне выхватить PHP: <?id_video='$id'?> Вот цикл таблицы: PHP: <?$result = mysql_query ("SELECT * FROM bd WHERE kat='$kat' ORDER BY data DESC LIMIT $start, $num",$db); $myrow = mysql_fetch_array ($result); do { printf (" <table width='100%%' border='0' cellpadding='0' cellspacing='0' class='tabl_zag'> <tr> <td width='10%%' height='36' background=\"img/zagolovok.jpg\" class='zagolovok_img'><img src=\"img/icon/plenka.jpg\" width='35' height='27'></td> <td width='53%%' background=\"img/zagolovok.jpg\" class='zagolovok'><a href='video.php?kat=%s&id=%s'>%s</a></td> <td width='7%%' background=\"img/zagolovok.jpg\" class='zagolovok_img'><img src=\"img/icon/categories.jpg\" width='26' height='21'></td> <td width='30' background=\"img/zagolovok.jpg\" class='zagolovok'>%s</td> </tr> <tr> <td colspan='4'><table width='100%%' border='0' cellspacing='0' cellpadding='0'> <tr> <td width='180' height='250' class='miniimg'><a href='video.php?kat=%s&id=%s'><img src=\"%s\" width='147' height='212' alt='%s'></a></td> <td class='text_mini'><p>%s...</p> <p><a href='video.php?kat=%s&id=%s'>Cмотреть....</a></p></td> </tr> </table> </td> </tr> <tr> <td colspan='4' class='td_video'><table width='100%%' border='0' cellspacing='0' cellpadding='0'> <tr> <td width='7%%' height='34'><img src=\"img/icon/kalendar.jpg\" width='29' height='27'></td> <td width='23%%' align='left' valign='middle'>Дата: %s</td> <td width='27%%' align='center' valign='middle'>Просмотров: %s</td> <td width='30%%'>Комментариев: 1000</td> <td width='7%%'><img src=\"img/icon/comments.jpg\" width='29' height='25'></td> </tr> </table></td> </tr> <tr> <td height='5' colspan='4' class='td_niz'> </td> </tr><br> ", $myrow["kat"],$myrow["id"],$myrow["title"],$myrow2["title"],$myrow["kat"],$myrow["id"],$myrow["imaging"],$myrow["title"],$myrow["text"],$myrow["kat"],$myrow["id"],$myrow["data"],$myrow["view"]); } while ($myrow = mysql_fetch_array ($result)); printf ("</table>");?> По сути мне надо PHP: <?id_video='$id'?> - это и есть $myrow["id"], но как это вставить в запрос подсчета количества комментов??? Постарался описать проблемы, надеюсь понятно))
Где? Куда? Что? Почему? Зачем? Где запрос на количество коментов? Куда вставить $myrow["id"]? Что означает эта запись: <?id_video='$id'?>? Почему do{...}while,а не while{...}? Зачем использовать printf?
PHP: <? $sum_comment_id = mysql_query("SELECT COUNT(*) FROM comments WHERE id_video='$id' and kat='$kat'",$db); $sum_comment_id = mysql_fetch_array($sum_comment_id); echo $sum_comment_id[0]; ?> Это и есть нужная мне переменная $id в запросе, но как ее туда подставить не знаю. а как можно без printf???
echo print HEREDOC просто html с php вставками. Что надо? Вывести эту таблицу и в ней вывести количество коментов? Кстати еще один "зачем". Зачем экранировать двойные кавычки в строке, когда можно воспользоваться одинарными? т.е. Код (Text): <img src="img/icon/plenka.jpg" width='35' height='27'> Почему не: Код (Text): <img src='img/icon/plenka.jpg' width='35' height='27'>
PHP: <?php$sum_comment_id = mysql_query("SELECT COUNT(*) FROM comments WHERE id_video='$id' and kat='$kat'",$db); // при условии WHERE id_video='$id' and kat='$kat' $nums = mysql_num_rows($sum_comment_id); echo' <td width="30%">Комментариев: '.$nums.'</td>'; //подсчет ?>
id int(5) kat int(2) - номер категории title varchar(255) - заголовок meta_d text - описание meta_k text - ключевики text text - текст поста view int(7) - кол-во просмотров data date - дата добавления поста imaging varchar(255) - рисунок поста video text - код видеоролика
greenzlat, так вставьте запрос в цикл. PHP: $comm = mysql_fetch_row($nums); $total_com = $comm[0]; echo' <td width="30%">Комментариев: '.$total_com.'</td>'; //подсчет
Вот вам примерчик, разбирайтесь: PHP: <?php //Запрашиваем сами НОВОСТИ $query = "SELECT id, head,DATE_FORMAT(date,'%d-%m-%Y %H:%i') as date_reg, news FROM `newslent` WHERE hide='show' ORDER BY id DESC LIMIT ".($page - 1)*$pnumber.",".$pnumber; $res = mysql_query($query); if (!$res) echo mysql_error(); while ($row = mysql_fetch_array($res)) { ?> <table border=1 width=100% cellpadding="4" cellspacing="0" align=center> <tr><h1><?echo $row['head']?></h1></tr> <tr><?echo $row['date_reg']?></tr><br> <tr><?echo nl2br($row['news'])?></tr><br> </table> <? //считаем количество комментов $q = "SELECT COUNT(*) FROM `comments` WHERE id_news=".$row['id']; $totalcom = mysql_query($q); $f_com = mysql_fetch_row($totalcom); $total_com_rows = $f_com[0]; //ссылка на комментарии echo "<center><a href=comments.php?id=".$row['id']."> Комментировать ($total_com_rows) </a></center>"; }
PHP: $result2 = mysql_query ("SELECT * FROM kategor WHERE id='$kat'",$db); $myrow2 = mysql_fetch_array ($result2); $result = mysql_query ("SELECT * FROM bd WHERE kat='$kat' ORDER BY data DESC LIMIT $start, $num",$db); while ($myrow = mysql_fetch_array ($result)) { ?> <table width='100%' border='0' cellpadding='0' cellspacing='0' class='tabl_zag'> <tr> <td width='10%' height='36' background="img/zagolovok.jpg" class='zagolovok_img'><img src="img/icon/plenka.jpg" width='35' height='27'></td> <td width='53%' background="img/zagolovok.jpg" class='zagolovok'><a href='video.php?kat=<?php echo $myrow['kat']?>&id=<?php echo $myrow['id']?>'><?php echo $myrow['title']?></a></td> <td width='7%' background="img/zagolovok.jpg" class='zagolovok_img'><img src="img/icon/categories.jpg" width='26' height='21'></td> <td width='30' background="img/zagolovok.jpg" class='zagolovok'><?php echo $myrow2['title']?></td> </tr> <tr> <td colspan='4'><table width='100%' border='0' cellspacing='0' cellpadding='0'> <tr> <td width='180' height='250' class='miniimg'><a href='video.php?kat=<?php echo $myrow['kat']?>&id=<?php echo $myrow['id']?>'><img src="<?php echo $myrow['imaging']?>" width='147' height='212' alt='<?php echo $myrow['title']?>'></a></td> <td class='text_mini'><p><?php echo $myrow['text']?>...</p> <p><a href='video.php?kat=<?php echo $myrow['kat']?>&id=<?php echo $myrow['id']?>'>Cмотреть....</a></p></td> </tr> </table> </td> </tr> <tr> <td colspan='4' class='td_video'><table width='100%' border='0' cellspacing='0' cellpadding='0'> <tr> <td width='7%' height='34'><img src="img/icon/kalendar.jpg" width='29' height='27'></td> <td width='23%' align='left' valign='middle'>Дата: <?php echo $myrow['data']?></td> <td width='27%' align='center' valign='middle'>Просмотров: <?php echo $myrow['view']?></td> <td width='30%'>Комментариев: 1000</td> <td width='7%'><img src="img/icon/comments.jpg" width='29' height='25'></td> </tr> </table></td> </tr> <tr> <td height='5' colspan='4' class='td_niz'> </td> </tr><br></table> <? $q = "SELECT COUNT(*) FROM 'comments' WHERE id_video=".$myrow['id']; $totalcom = mysql_query($q); $f_com = mysql_fetch_row($totalcom); $total_com_rows = $f_com[0]; echo $total_com_rows; }?> Выдает ошибку в месте вывода кол-ва комментариев, в этой строке $f_com = mysql_fetch_row($totalcom); Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in Z:\home\blokshot.ru\www\kategor.php on line 107
А когда это заработает я бы заменил все запросы на один. На данный момент прирост в скорости незначителен. Но если захочется выводить не 3 таблицы, а 10 количество запросов сократиться с 12 до 1, что значительно. [sql]select t1.id as vid, t1.title as vtitle, t1.text as vtext, t1.view as view, t1.data as vdata, t2.id as kid, t2.title as ktitle, t3.p2 as num from bd as t1 left outer join kat as t2 on t1.kat=t2.id left outer join (select id_video as p0, kat as p1 COUNT(*) as p2 FROM comments WHERE id_video=t1.id and kat=t1.kat group by id_video, kat) as t3 on t1.id=t3.p0 and t1.kat=t3.p1 order by vdata desc limit $start, $num[/sql] Псевдонимы полей и таблиц можно заменить на более удобные. Ну и не забыть изменить обращения к элементам myrow. Возможно если убрать "WHERE id_video=t1.id and kat=t1.kat" из подзапроса, то выборка произойдет быстрее, но это уже надо замерять. PS: а зачем kat в коментах?