За последние 24 часа нас посетили 22774 программиста и 1224 робота. Сейчас ищут 858 программистов ...

Как вывести данные из двух таблиц

Тема в разделе "PHP для новичков", создана пользователем WiNNeR, 11 июл 2019.

  1. WiNNeR

    WiNNeR Новичок

    С нами с:
    11 июл 2019
    Сообщения:
    13
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Добрый вечер, уважаемые форумчане, и профессионалы коддинга

    Передо мной встала задача вывести посетителю сайта данные из двух разных таблиц, а именно в одной таблице содержится информация по последним комментариям [ films_comment ] , а другая таблица это пользователи сайта [ user ]

    Суть: Пользователь пишет комментарий к фильму, он заносится в таблицу [ films_comment ] далее, мне нужно вывести текст на главную страницу сайта в раздел [ Последние комментарии ]

    Текст я вывожу нормально, но аватарку прикрепить не могу, т.к она берется из таблицы user

    Вопрос: как сделать что бы выводились последние комментарии например 5 последних, + что бы исходя из id того кто опубликовал, бралась информация из таблицы user об аватарке.

    Описал тупо, но уже не знаю что делать (

    Вот готовый код, тут почему то все выводится нормально

    Код (Text):
    1.         <div class="text_title">Комментарии к фильму</div>
    2.         <div class="films_comment">
    3.         <?
    4.         $user_films_comment = mysql_query( "SELECT comms, iduser, date FROM films_comment WHERE ident = '" . $get_films_row['id'] . "' ORDER BY date DESC LIMIT 10" );
    5.         while ( $user_films_comment_row = mysql_fetch_array( $user_films_comment ) ) {
    6.             $info_user_comment = mysql_fetch_array( mysql_query( "SELECT id, avatar, username FROM user WHERE id = '" . $user_films_comment_row['iduser'] . "' LIMIT 1" ) );
    7.             /*---формируем дату сообщения---*/
    8.             $month = array( 'янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек' );
    9.            
    10.             if ( date( 'd.m.Y', $user_films_comment_row['date'] ) == date( 'd.m.Y', time() ) ) {
    11.                 $mess_time = 'сегодня в ' . date( 'H:i', $user_films_comment_row['date'] );
    12.             } else
    13.             if ( date( 'd.m.Y', $user_films_comment_row['date'] ) == date( 'd.m.Y', time() - 86400 ) ) {
    14.                 $mess_time = 'вчера в ' . date( 'H:i', $user_films_comment_row['date'] );
    15.             } else {
    16.                 $mess_time = ( int ) date( 'd', $user_films_comment_row['date'] ) . ' ' . $month[( int ) date( 'm', $user_films_comment_row['date'] ) - 1] . ' ' . date( 'Y', $user_films_comment_row['date'] )  . ' в ' . date( 'H:i', $user_films_comment_row['date'] );
    17.             }
    18.             ?>
    19.             <div class="wrap_in_mess">
    20.                 <div style="width: 40px; text-align: center; float: left;"><img class="avatar" width="30" height="30" alt="" src="<?=ROOT?>/temp/avatar/<?=$info_user_comment['avatar']?>" /></div>
    21.                 <div class="in_mess_text wrap_walls_mess">
    22.                     <div class="us_name_mess"><a href="/id<?=$info_user_comment['id']?>" class="a_box" target="_blank"><?=$info_user_comment['username']?></a></div>
    23.                     <?=$user_films_comment_row['comms']?>
    24.                     <div class="time_mess"><?=$mess_time?></div>
    25.                 </div>
    26.             </div>
    27.             <?
    28.         }
    29.         ?>
    30.         </div>

    А мне нужно что бы было вот так, только ещё показывались аватарки из таблицы user

    Код (Text):
    1. <?
    2. if ( !isset( $_SESSION['iduser'] ) ) {
    3.    
    4.      $bestcom1 = mysql_query( "SELECT id FROM films_comment ORDER BY date DESC LIMIT 1" );
    5.  
    6.  
    7.     if ( mysql_num_rows( $bestcom1 ) != 0 ) {
    8.         $i = 0;  
    9.         $get_bestcom1 = mysql_query( "SELECT ident, iduser, comms FROM films_comment ORDER BY date DESC LIMIT 5" );
    10.        
    11.         while ( $bestcom = mysql_fetch_array( $get_bestcom1 ) ) {
    12. ?>
     
  2. WiNNeR

    WiNNeR Новичок

    С нами с:
    11 июл 2019
    Сообщения:
    13
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Решение найдено

    Код (Text):
    1. <?
    2. if ( !isset( $_SESSION['iduser'] ) ) {
    3.  
    4.      $bestcom1 = mysql_query( "SELECT id FROM films_comment ORDER BY date DESC LIMIT 1" );
    5.  
    6.  
    7.     if ( mysql_num_rows( $bestcom1 ) != 0 ) {
    8.         $i = 0;  
    9.         $get_bestcom1 = mysql_query( "SELECT ident, iduser, comms FROM films_comment ORDER BY date DESC LIMIT 5" );
    10.      
    11.         while ( $bestcom = mysql_fetch_array( $get_bestcom1 ) ) {
    12.  
    13. $info_user_comment = mysql_fetch_array( mysql_query( "SELECT id, avatar, username FROM user WHERE id = '" . $user_films_comment_row['iduser'] . "' LIMIT 1" ) );
    14. ?>
     
  3. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    можно вытащить всё это одним запросом
    Код (Text):
    1. SELECT
    2.     fk.id, fk.ident, fk.comms
    3.     ,u.avatar, u.username
    4. FROM films_comment fk
    5. LEFT JOIN `user` u ON u.id=fk.iduser
    6. ORDER BY fk.date DESC
    7. LIMIT 5;
     
    WiNNeR нравится это.
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    @WiNNeR, это типичная задача LEFT JOIN.
    --- Добавлено ---
    P.S. Не смешивайте взаимодействие с БД и разметку. Также используйте какое-нибудь современное расширение для работы с БД, например MySQLi ;)
     
    WiNNeR нравится это.