За последние 24 часа нас посетили 42583 программиста и 1814 роботов. Сейчас ищут 877 программистов ...

Вывод таблицы в цикле

Тема в разделе "PHP для новичков", создана пользователем greenzlat, 24 янв 2010.

  1. greenzlat

    greenzlat Активный пользователь

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    Проблема такова: У меня на страницу выводится в цикле таблица поста, которых на странице по 3! В каждом посте есть такое поле как кол-во комментариев. Дак вот встретил проблему подсчета кол-ва комментов для каждого поста.
    Таблица комментов содержит поля: id_video, kat, text.
    id-video - id этого поста в таблице, где хранятся посты.
    Подсчет комментов делаю так:

    PHP:
    1.  
    2. <? $sum_comment_id = mysql_query("SELECT COUNT(*) FROM comments WHERE id_video='$id' and kat='$kat'",$db);
    3. $sum_comment_id = mysql_fetch_array($sum_comment_id);
    4. echo $sum_comment_id[0]; ?>
    5.  
    так вот проблема, как мне выхватить
    PHP:
    1. <?id_video='$id'?>
    Вот цикл таблицы:
    PHP:
    1.  
    2.  
    3. <?$result = mysql_query ("SELECT * FROM bd  WHERE kat='$kat' ORDER BY data DESC LIMIT $start, $num",$db);
    4.     $myrow = mysql_fetch_array ($result);
    5.  
    6. do {
    7.  printf ("
    8.      <table width='100%%' border='0' cellpadding='0' cellspacing='0' class='tabl_zag'>
    9.           <tr>
    10.             <td width='10%%' height='36' background=\"img/zagolovok.jpg\" class='zagolovok_img'><img src=\"img/icon/plenka.jpg\" width='35' height='27'></td>
    11.             <td width='53%%' background=\"img/zagolovok.jpg\" class='zagolovok'><a href='video.php?kat=%s&id=%s'>%s</a></td>
    12.             <td width='7%%' background=\"img/zagolovok.jpg\" class='zagolovok_img'><img src=\"img/icon/categories.jpg\" width='26' height='21'></td>
    13.             <td width='30' background=\"img/zagolovok.jpg\" class='zagolovok'>%s</td>
    14.           </tr>
    15.           <tr>
    16.             <td colspan='4'><table width='100%%' border='0' cellspacing='0' cellpadding='0'>
    17.               <tr>
    18.                 <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>
    19.                 <td class='text_mini'><p>%s...</p>
    20.                   <p><a href='video.php?kat=%s&id=%s'>Cмотреть....</a></p></td>
    21.               </tr>
    22.             </table>            </td>
    23.           </tr>
    24.           <tr>
    25.             <td colspan='4' class='td_video'><table width='100%%' border='0' cellspacing='0' cellpadding='0'>
    26.               <tr>
    27.                 <td width='7%%' height='34'><img src=\"img/icon/kalendar.jpg\" width='29' height='27'></td>
    28.                 <td width='23%%' align='left' valign='middle'>Дата: %s</td>
    29.                 <td width='27%%' align='center' valign='middle'>Просмотров: %s</td>
    30.                 <td width='30%%'>Комментариев: 1000</td>
    31.                 <td width='7%%'><img src=\"img/icon/comments.jpg\" width='29' height='25'></td>
    32.               </tr>
    33.             </table></td>
    34.           </tr>
    35.           <tr>
    36.             <td height='5' colspan='4' class='td_niz'> </td>
    37.           </tr><br>
    38.  
    39. ",
    40. $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"]);
    41.  
    42.  
    43.      }
    44.    while ($myrow = mysql_fetch_array ($result));
    45.        
    46.            
    47.    printf ("</table>");?>
    По сути мне надо
    PHP:
    1. <?id_video='$id'?>
    - это и есть $myrow["id"], но как это вставить в запрос подсчета количества комментов???
    Постарался описать проблемы, надеюсь понятно))
     
  2. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Где? Куда? Что? Почему? Зачем?

    Где запрос на количество коментов?
    Куда вставить $myrow["id"]?
    Что означает эта запись: <?id_video='$id'?>?

    Почему do{...}while,а не while{...}?
    Зачем использовать printf?
     
  3. greenzlat

    greenzlat Активный пользователь

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    PHP:
    1. <? $sum_comment_id = mysql_query("SELECT COUNT(*) FROM comments WHERE id_video='$id' and kat='$kat'",$db);
    2.  $sum_comment_id = mysql_fetch_array($sum_comment_id);
    3.  echo $sum_comment_id[0]; ?>
    Это и есть нужная мне переменная $id в запросе, но как ее туда подставить не знаю.

    а как можно без printf???
     
  4. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    echo
    print
    HEREDOC
    просто html с php вставками.

    Что надо? Вывести эту таблицу и в ней вывести количество коментов?

    Кстати еще один "зачем". Зачем экранировать двойные кавычки в строке, когда можно воспользоваться одинарными?
    т.е.
    Код (Text):
    1. <img src="img/icon/plenka.jpg" width='35' height='27'>
    Почему не:
    Код (Text):
    1. <img src='img/icon/plenka.jpg' width='35' height='27'>
     
  5. greenzlat

    greenzlat Активный пользователь

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    Да
     
  6. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    НУ собственно тогда где эта самая $sum_comment_id используется при выводе таблицы?
     
  7. greenzlat

    greenzlat Активный пользователь

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    HTML:
    1. <td width='30%%'>Комментариев: 1000</td>
    вот вместо 1000 ее надо поставить
     
  8. ekip

    ekip Активный пользователь

    С нами с:
    11 авг 2009
    Сообщения:
    118
    Симпатии:
    0
    PHP:
    1.  
    2. <?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'
    3. $nums = mysql_num_rows($sum_comment_id);
    4. echo' <td width="30%">Комментариев: '.$nums.'</td>'; //подсчет
    5. ?>
     
  9. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Какова структура таблицы bd? И что обозначает каждое поле в этой таблице?
     
  10. greenzlat

    greenzlat Активный пользователь

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    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 - код видеоролика
     
  11. greenzlat

    greenzlat Активный пользователь

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    ekip, мне в цикле надо выводить таблицы и этот запрос не проходит!
     
  12. amen

    amen Активный пользователь

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    greenzlat, так вставьте запрос в цикл.

    PHP:
    1.  
    2. $comm = mysql_fetch_row($nums);
    3. $total_com = $comm[0];
    4. echo' <td width="30%">Комментариев: '.$total_com.'</td>'; //подсчет
     
  13. greenzlat

    greenzlat Активный пользователь

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    Не понимаю как этот вопрос с моим выводом цикла увязать
     
  14. amen

    amen Активный пользователь

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Вот вам примерчик, разбирайтесь:

    PHP:
    1.  
    2. <?php
    3. //Запрашиваем сами НОВОСТИ
    4. $query = "SELECT id, head,DATE_FORMAT(date,'%d-%m-%Y %H:%i') as date_reg, news
    5.          FROM `newslent`
    6.          WHERE hide='show'
    7.           ORDER BY id DESC LIMIT ".($page - 1)*$pnumber.",".$pnumber;
    8. $res = mysql_query($query);
    9.  
    10. if (!$res) echo mysql_error();
    11. while ($row = mysql_fetch_array($res))
    12. {
    13.  ?>
    14.  
    15.  <table border=1 width=100% cellpadding="4" cellspacing="0" align=center>
    16.  <tr><h1><?echo $row['head']?></h1></tr>
    17.  <tr><?echo $row['date_reg']?></tr><br>
    18.  <tr><?echo nl2br($row['news'])?></tr><br>
    19.  </table>
    20.  
    21.  <?
    22.  //считаем количество комментов
    23.  $q = "SELECT COUNT(*) FROM `comments`
    24.       WHERE id_news=".$row['id'];
    25.  $totalcom = mysql_query($q);
    26.  $f_com = mysql_fetch_row($totalcom);
    27.  $total_com_rows = $f_com[0];
    28.  //ссылка на комментарии
    29.  echo "<center><a href=comments.php?id=".$row['id'].">
    30.       Комментировать ($total_com_rows)
    31.       </a></center>";
    32. }
     
  15. greenzlat

    greenzlat Активный пользователь

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    Спасибо огромное! Все понятно)) Сейчас попробую свой кодик исправить!
     
  16. greenzlat

    greenzlat Активный пользователь

    С нами с:
    27 апр 2008
    Сообщения:
    255
    Симпатии:
    0
    PHP:
    1. $result2 = mysql_query ("SELECT * FROM kategor WHERE id='$kat'",$db);
    2. $myrow2 = mysql_fetch_array ($result2);
    3. $result = mysql_query ("SELECT * FROM bd  WHERE kat='$kat' ORDER BY data DESC LIMIT $start, $num",$db);
    4. while ($myrow = mysql_fetch_array ($result))
    5. {
    6. ?>
    7.       <table width='100%' border='0' cellpadding='0' cellspacing='0' class='tabl_zag'>
    8.            <tr>
    9.              <td width='10%' height='36' background="img/zagolovok.jpg" class='zagolovok_img'><img src="img/icon/plenka.jpg" width='35' height='27'></td>
    10.              <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>
    11.              <td width='7%' background="img/zagolovok.jpg" class='zagolovok_img'><img src="img/icon/categories.jpg" width='26' height='21'></td>
    12.              <td width='30' background="img/zagolovok.jpg" class='zagolovok'><?php echo $myrow2['title']?></td>
    13.            </tr>
    14.            <tr>
    15.              <td colspan='4'><table width='100%' border='0' cellspacing='0' cellpadding='0'>
    16.                <tr>
    17.                  <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>
    18.                  <td class='text_mini'><p><?php echo $myrow['text']?>...</p>
    19.                    <p><a href='video.php?kat=<?php echo $myrow['kat']?>&id=<?php echo $myrow['id']?>'>Cмотреть....</a></p></td>
    20.                </tr>
    21.              </table>            </td>
    22.            </tr>
    23.            <tr>
    24.              <td colspan='4' class='td_video'><table width='100%' border='0' cellspacing='0' cellpadding='0'>
    25.                <tr>
    26.                  <td width='7%' height='34'><img src="img/icon/kalendar.jpg" width='29' height='27'></td>
    27.                  <td width='23%' align='left' valign='middle'>Дата: <?php echo $myrow['data']?></td>
    28.                  <td width='27%' align='center' valign='middle'>Просмотров: <?php echo $myrow['view']?></td>
    29.                  <td width='30%'>Комментариев: 1000</td>
    30.                  <td width='7%'><img src="img/icon/comments.jpg" width='29' height='25'></td>
    31.                </tr>
    32.              </table></td>
    33.            </tr>
    34.            <tr>
    35.              <td height='5' colspan='4' class='td_niz'> </td>
    36.            </tr><br></table>
    37.  <?
    38.  $q = "SELECT COUNT(*) FROM 'comments'
    39.         WHERE id_video=".$myrow['id'];
    40.   $totalcom = mysql_query($q);
    41.   $f_com = mysql_fetch_row($totalcom);
    42.   $total_com_rows = $f_com[0];
    43.   echo $total_com_rows;
    44.   }?>
    45.  
    Выдает ошибку в месте вывода кол-ва комментариев, в этой строке $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
     
  17. obsrv

    obsrv Активный пользователь

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    FROM 'comments' заменить на FROM `comments`
     
  18. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    А когда это заработает я бы заменил все запросы на один.
    На данный момент прирост в скорости незначителен. Но если захочется выводить не 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 в коментах?