За последние 24 часа нас посетили 17490 программистов и 1725 роботов. Сейчас ищут 1483 программиста ...

Массив из двух запросов или как сделать выборку из одной таблицы два раза?

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

  1. Yarkee

    Yarkee Новичок

    С нами с:
    25 июн 2016
    Сообщения:
    13
    Симпатии:
    0
    Всем привет.
    Столкнулся с одной проблемой:
    Есть главная страница, на которой отображены пользователи, список новостей и список, пускай будет, дуэлей.

    В дуэли участвуют две стороны, левая и правая. На каждой стороне по одному пользователю.
    Таблица дуэлей состоит исключительно из цифр: ID, member_left_id, member_right_id, season_id, project_id и т.д.
    И есть таблица members. Как понятно из названия, таблица пользователей. Мне нужно вывести список дуэлей с именами участников и их фотографиями, но при попытке достать значения member_l_one_id и member_r_one_id из одной таблицы members, sql выдает ошибку:
    Код (Text):
    1. Warning: mysql_fetch_array() expects parameter 1 to be long, resource given in D:\Web\OpenServer\domains\battle.dev\index.php on line 74
    Вот код программы

    Код (Text):
    1.             $sql=mysql_query("SELECT battles.*, projects.title AS project_title, branches.title AS branch_title, seasons.title AS season_title, members.nickname AS mc_left_nickname, members.nickname AS mc_right_nickname FROM battles, projects, branches, seasons, members WHERE battles.project_id = projects.id AND battles.branch_id = branches.id AND battles.season_id = seasons.id AND battles.member_l_one_id = members.id AND battles.member_r_one_id = member.id");
    2.             while($result = mysql_fetch_array($sql))
    3.             {
    4.  
    5.                 $battle_id            =    $result['battle_id'];
    6.                 $project_id            =    $result['project_id'];
    7.                 $project_title        =    $result['project_title'];
    8.                 $branch_id            =    $result['branch_id'];
    9.                 $branch_title        =    $result['branch_title'];
    10.                 $season_id            =    $result['season_id'];
    11.                 $season_title        =    $result['season_title'];
    12.                 $mc_left_nickname    =    $result['mc_left_nickname'];
    13.                 $mc_left_photo        =    $result['mc_left_photo'];
    14.                 $mc_right_nickname    =    $result['mc_right_nickname'];
    15.                 $mc_right_photo        =    $result['mc_right_photo'];
    16.  
    17.                 $select_query = "SELECT * FROM members WHERE id = " . $member_l_one_id;
    18.                 $member = mysql_query($select_query);
    19.  
    20.                 printf(
    21.                     '<a href="battle.php?id='. $battle_id .'"><div class="double_tabloR twoSt" style="padding-left: 0px;">
    22.                     <div class="sport_board line soccer doubleBoard">
    23.                         <div class="board_div">
    24.                             <div class="top_line">
    25.                                 <span class="cur-time line" id="timeGame">' . $project_title ." ". $branch_title .'</span>
    26.                             </div>
    27.                             <table class="teamsDiv">
    28.                                 <tbody>
    29.                                     <tr class="teams_img">
    30.                                         <td>
    31.                                             <div class="team_logo">
    32.                                                 <img src="'. $member_l_photo .'">
    33.                                             </div>
    34.                                         </td>
    35.                                         <td class="team_logo_con">
    36.                                             <div class="team"><span>' . $mc_left_nickname . '</span></div>
    37.                                         </td>
    38.                                         <td class="score_div">
    39.                                             <div class="time">
    40.                                                 <div class="cl">VS</div>
    41.                                             </div>
    42.                                         </td>
    43.                                         <td class="team_logo_con">
    44.                                             <div class="team"><span>' . $mc_right_nickname . '</span></div>
    45.                                         </td>
    46.                                         <td>
    47.                                             <div class="team_logo">
    48.                                                 <img src="' . $member_r_photo . '">
    49.                                             </div>
    50.                                         </td>
    51.                                     </tr>
    52.                                 </tbody>
    53.                             </table>
    54.                         </div>
    55.                     </div>
    56.                 </div>
    57.             </a>
    58.             <br>');
    59.  
    60.  
    61.                 }
    Подскажите, пожалуйста, как реализовать это? Одно имя участника выводится нормально, а когда я пытаюсь достать два, вылетает ошибка.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Где 74 строка?
     
  3. zahermaher

    zahermaher Новичок

    С нами с:
    27 сен 2014
    Сообщения:
    169
    Симпатии:
    14
    походу переменная $sql у тебя пустая.
    напиши
    Код (Text):
    1. var_dump($sql);
    после строки:
    $sql=mysql_query("SELECT battles.*, projects.title AS project_title, branches.title AS branch_title, seasons.title AS season_title, members.nickname AS mc_left_nickname, members.nickname AS mc_right_nickname FROM battles, projects, branches, seasons, members WHERE battles.project_id = projects.id AND battles.branch_id = branches.id AND battles.season_id = seasons.id AND battles.member_l_one_id = members.id AND battles.member_r_one_id = member.id");
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Тут двойной join нужен с одной таблицей нужен. Весь твой жуткий запрос лень разбирать, да и ты не объясняешь, как у тебя все эти таблицы связаны, но если только битву с двумя участниками, то должно быть примерно следующее
    Код (Text):
    1.  
    2. select b.*, m1.nickname mc_left_nickname, m2.nickname  mc_right_nickname  from battles b
    3.     join members m1 on (m1.id=b.member_l_one_id)
    4.     join members m2 on (m2.id=b.member_r_one_id)
    5. where b.id = 25
    where взял от балды, но join должен так выглядеть
     
    Yarkee нравится это.
  5. Yarkee

    Yarkee Новичок

    С нами с:
    25 июн 2016
    Сообщения:
    13
    Симпатии:
    0
    74 строка и есть первая строка моего кода.
     
  6. Yarkee

    Yarkee Новичок

    С нами с:
    25 июн 2016
    Сообщения:
    13
    Симпатии:
    0
    Помогло, спасибо, но у меня теперь каждая дуэль выводится по 4 раза, то есть у меня всего 4 их в базе и в сумме выводит 16.
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Поставьте DISTINCT. Вообще, почитайте разное, попробуйте
     
    Yarkee нравится это.