2016-01-26 8 views
0

Как получить результаты из двух таблиц в MySQLi с использованием объектно-ориентированного подхода?Как получить результаты из двух таблиц? (MySQLi)

Я пытаюсь получить информацию о пользователе для $ stmt2 из $ stmt. $ stmt загружается отлично, но $ stmt2 не потому, что он не получает результаты.

Вот код для этого:

<?php 

      if ($stmt = $conn->prepare('SELECT `id`, `kills` FROM `rp_stats` ORDER BY `kills` DESC LIMIT 6')) 
      { 
       $stmt->execute(); 
       $stmt->bind_result($id, $kills); 

       while($stmt->fetch()) 
       { 
        if ($stmt2 = $conn->prepare("SELECT `id`, `username`, `look`, `online` FROM `users` WHERE `id` = ?")) 
        { 
        $stmt2->bind_param("i", $id); 
        $stmt2->execute(); 
        $stmt2->bind_result($id, $username, $look, $online); 
        $user = $stmt2->get_result(); 
        } 

        global $stmt2; 

        echo '<div class="leaderboardWrap"> 
        <div class="userAvatar" style="float: left;width: 50px;display: inline-block;height: 50px;background-image: url(\'https://www.habbo.nl/habbo-imaging/avatarimage?figure='. $look . '&size=m&headonly=1\');"></div> 
        <div class="leaderboardContainer"> 
        <p style="padding-top: 6px;"><span class="username-rainbow"><a ng-click="progress()" href="/user/' . $username . '">' . $username . '</a></span></p> 
        <p style="margin-top: -9px;"><i>$' . formatWithSuffix($credits) . ' cash</i></p> 
        </div> 
        </div>'; 
       } 

       $stmt->close(); 
      } 
     ?> 

Я хочу, чтобы показать 6 различных пользователей на основании пользовательского стата как слева показывает изображение, но вместо этого, я получаю правильное изображение.

Wanted resultcurrent result

ответ

1

Вы используете одинаковые имена столбцов в разных таблицах, поэтому конфликты объединения по умолчанию. Вот почему вы должны использовать псевдонимы, например, так:

SELECT s.id, s.kills, u.username 
FROM rp_stats s 
INNER JOIN users u ON s.user_id = u.id 
ORDER BY s.kills DESC LIMIT 6 

Примечание! это я использую user_id. Это внешний ключ (ссылка) от rp_stats до users. Я имею в виду, что сравнивать пользователей users.id с rp_stats.id нехорошо. Используя эту конструкцию, пользователь всегда может иметь макс. 1 стат. Вы создаете большую гибкость для пользователя в столбце user_id, который ссылается на таблицу пользователя.

2

Попробуйте использовать inner join в базе данных, чтобы минимизировать процесс выборки данных:

SELECT `id`, `kills` FROM `rp_stats` 
INNER JOIN users ON rp_stats.id = user.id 
ORDER BY `kills` DESC LIMIT 6 
+0

Это неправильный ответ, потому что идентификатор неоднозначен. Вы сравниваете rp_stats.id с users.id? – schellingerht

0
"SELECT RS.`id`, RS.`kills`, US.`id`, US.`username`, US.`look`, US.`online` FROM rp_stats RS, users US WHERE US.`id`=RS.`id` ORDER BY RS.`kills` DESC LIMIT 6"; 

Нормированный запрос может помочь.

+0

Спасибо, человек, ваш запрос работал! –

Смежные вопросы