Здравствуйте, не смогла разобраться в данном моменте, просьба помочь. 1. Ранее была страница blog.html и несколько блоков <div>, где имелась ссылка на страницу с комментариями, т.е на странице blog.html, в каждом из блоков делала вывод количества комментариев, таким образом : PHP: $res=mysqli_query($connect,"SELECT count(id) FROM comment WHERE theme_id='info-1' and moderation=1"); $num_comm=mysqli_fetch_array($res); echo '<div class="comment">Комментариев - <a href="article.php#comment" title="Перейти к комментариям">'.$num_comm[0].'</a></div>'; Присваивала каждой странице свой theme_id и все отлично работает. 2. Решила все перекинуть в БД и данный код не работает или работает коряво. Использую цикл do-while, где в начале делаю выборку, но у меня получается, сверху в коде сразу 2 выборки из разных таблиц. PHP: $res_num = mysqli_query ($connect, "SELECT COUNT(id) FROM comment WHERE post='$id'"); $comm_num = mysqli_fetch_array($res_num); $res_rows=mysqli_query ($connect,"SELECT id, img, title, description, date, refer FROM log"); $num_rows=mysqli_fetch_array($res_rows); do { printf ("<div class='post'> <div class='entry'> <img src='%s' width='170' height='150'> <!-- изображение --> <h2><span class='gradient'>%s</span></h2> <!-- название --> <blockquote><p>%s</p></blockquote> <!-- описание --> <div class='post-info'> <h5>Дата: %s <!-- дата --> <p><a href='article.php?id=%s'>%s</a></p> </h5> <div class='comment'>Комментариев - <a href='article.php?id=%s'>%s</a></div> </div> <!-- post-info ends --> </div> <!-- entry ends --> </div> <!-- post ends -->", $num_rows['img'], $num_rows['title'], $num_rows['description'], $num_rows['date'], $num_rows['id'], $num_rows['refer'], $num_rows['id'], $comm_num['0']); } while ($num_rows = mysqli_fetch_array($res_rows)); т.е имеется страница article.php со своим id, где находятся комментарии и если пробовать там сделать просмотр количества комментариев, то проблем нет, код описанный в 1 пункте работает, но если я пытаюсь выводить общее число комментариев не на странице article.php, а на странице blog.php без id для каждой статьи со своим id, то возникает проблема как правильно сделать выборку из таблицы comment, который я пыталась реализовать в пункте 2. На скрине, 1 из блоков на странице blog.php, где нужно вывести количество комментариев. В данный момент на всех блоках Комментариев - 0. Заранее благодарна всем откликнувшимся, Ольга.
1) Используй цикл while 2) Можешь сделать запрос на количество в цикле 3) не работает у тебя потому что запрос вот этот у тебя достает по id PHP: $res_num = mysqli_query ($connect, "SELECT COUNT(id) FROM comment WHERE post='$id'"); а так как там выводятся все записи $id не существует.
Спасибо, за ответ. У меня к вам просьба. Не могли бы вы, пожалуйста, подробнее разъяснить. C php пока на начальном уровне и не получается некоторые моменты реализовать. Заранее благодарна, Ольга
PHP: $res_rows=mysqli_query ($connect,"SELECT id, img, title, description, date, refer FROM log"); while($num_rows=mysqli_fetch_array($res_rows)){ $res_num = mysqli_query ($connect, "SELECT COUNT(id) FROM comment WHERE post='{$num_rows['id']}'"); //тут пошло все дальше твое } это работать будет но, лучше сделать один запрос на выборку и количества и данных а не в цикле. Кто знает как сделать такой запрос подскажите ей, мне тоже будет интересно. С уважением, Виктор
чур вас чур, учить в цикле использовать запросы - невероятное зло а запрос такой нужен Код (Text): SELECT l.id, l.img, l.title, l.description, l.date, l.refer, COUNT(c.id) AS cnt FROM log AS l LEFT JOIN comment AS c ON c.post = l.id GROUP BY l.id
Здравствуйте, разобралась. Спасибо. Данный цикл с постусловием работает, код : PHP: $res_rows=mysqli_query ($connect,"SELECT l.id, l.img, l.title, l.description, l.date, l.refer, COUNT(c.id) AS cnt FROM dpn_log AS l LEFT JOIN dpn_comment AS c ON c.post = l.id GROUP BY l.id ORDER BY id desc"); $num_rows=mysqli_fetch_array($res_rows); do { printf ("<div class='post'> <div class='entry'> <img src='%s' width='170' height='150'> <!-- изображение --> <h2><span class='gradient'>%s</span></h2> <!-- название --> <blockquote><p>%s</p></blockquote> <!-- описание --> <div class='post-info'> <h5>Дата: %s <!-- дата --> <p><a href='article.php?id=%s#link' class='right-blog'>➝ %s</a></p> </h5> <div class='comment'>Комментариев - <a href='article.php?id=%s#comment' title='Перейти к комментариям'>%s</a></div> </div> <!-- post-info ends --> </div> <!-- entry ends --> </div> <!-- post ends -->", $num_rows['img'], $num_rows['title'], $num_rows['description'], $num_rows['date'], $num_rows['id'], $num_rows['refer'], $num_rows['id'], $num_rows['cnt']); } while ($num_rows = mysqli_fetch_array($res_rows)); Но правильней было бы использовать цикл с предусловием, пробовала так : PHP: $res_rows=mysqli_query ($connect,"SELECT l.id, l.img, l.title, l.description, l.date, l.refer, COUNT(c.id) AS cnt FROM dpn_log AS l LEFT JOIN dpn_comment AS c ON c.post = l.id GROUP BY l.id ORDER BY id desc"); while($num_rows=mysqli_fetch_array($res_rows)) { printf ("<div class='post'> <div class='entry'> <img src='%s' width='170' height='150'> <!-- изображение --> <h2><span class='gradient'>%s</span></h2> <!-- название --> <blockquote><p>%s</p></blockquote> <!-- описание --> <div class='post-info'> <h5>Дата: %s <!-- дата --> <p><a href='article.php?id=%s#link' class='right-blog'>➝ %s</a></p> </h5> <div class='comment'>Комментариев - <a href='article.php?id=%s#comment' title='Перейти к комментариям'>%s</a></div> </div> <!-- post-info ends --> </div> <!-- entry ends --> </div> <!-- post ends -->", $num_rows['img'], $num_rows['title'], $num_rows['description'], $num_rows['date'], $num_rows['id'], $num_rows['refer'], $num_rows['id'], $num_rows['cnt']); } В запросе я использую цикл while, что как я поняла нехорошо, подскажите как сделать запрос без цикла. Просьба извинить, но работала только с циклами пока, поэтому нужна помощь. Как вариант, так можно ? PHP: $number = mysqli_num_rows($res); for ($n=1; $n<=$number; $n++) { $comments=mysqli_fetch_array($res); // Оформление и вывод echo '<h3>'.$comments['title'].'</h3>'; echo '<div>'.$comments['text'].'</div>'; } Заранее благодарна.
неверно понимаете, я сказал в цикле не желательно использовать запросы - то есть производить их вы не в запросе while используете - а для отработки его результата - это норм но обычно для отображения результатов запросов - используют перебор всех значений с помощью foreach
Спасибо за ответ, У меня ещё к вам есть 1 вопрос и 1 просьба. 1. Лучше использовать цикл с предусловием while или особой разницы нет, если применять цикл с пустословием do-while ? 2. У меня большая просьба, не могли бы вы на моём примере показать, как использовать foreach, так как где-то читала что цикл (do) while нецелесообразно использовать (так ли это ?) Сейчас у меня следующий код : PHP: $res_rows=mysqli_query ($connect,"SELECT l.id, l.img, l.title, l.description, l.date, l.refer, COUNT(c.id) AS cnt FROM dpn_log AS l LEFT JOIN dpn_comment AS c ON c.post = l.id GROUP BY l.id ORDER BY id desc"); while($num_rows=mysqli_fetch_array($res_rows)) { printf ("<div class='post'> <div class='entry'> <img src='%s' width='170' height='150'> <!-- изображение --> <h2><span class='gradient'>%s</span></h2> <!-- название --> <blockquote><p>%s</p></blockquote> <!-- описание --> <div class='post-info'> <h5>Дата: %s <!-- дата --> <p><a href='article.php?id=%s#link' class='right-blog'>➝ %s</a></p> </h5> <div class='comment'>Комментариев - <a href='article.php?id=%s#comment' title='Перейти к комментариям'>%s</a></div> </div> <!-- post-info ends --> </div> <!-- entry ends --> </div> <!-- post ends -->", $num_rows['img'], $num_rows['title'], $num_rows['description'], $num_rows['date'], $num_rows['id'], $num_rows['refer'], $num_rows['id'], $num_rows['cnt']); } Как тут поменять и использовать конструкцию foreach ? Заранее спасибо благодарна за ответ, Ольга.
У них разные цели применения. do {} while() - если код в блоке должен быть выполнен минимум один раз. В случае while() {} - код в блоке может быть не выполнен ни разу. В Вашем случае, если запрос вернет пустой набор - будут неприятности... 2. Цикл foreach предназначен для обхода массива. mysqli_query возвращает не массив.