2013-06-15 2 views
1

Привет, я создаю игровые трофейные системы, и я все еще изучаю pdo. У меня есть две таблицы в моей базе данныхКак получить данные из двух столбцов с помощью foreach

Первая таблица (игры) структура

id, title, thumb, bronze, silver, gold, platinum 

Вторая таблица (трофеи) структура

id, title, game_id 

каждый трофей назначен на игру по столбцам (game_id)

Я хочу, чтобы перечислить игры, как следовать

название игры

заработал трофеи х от общего

запрос я использую только получить общее количество трофеев я не знаю, как получить данные игры трофей из таблицы трофеев

это мой запрос код

$stmt = $db->query('SELECT * FROM trophies ORDER BY id DESC'); 
$numcat = $stmt->rowCount(); 
if($numcat == 0) 
{ 
    echo "There's No Trophies To Show"; 
} 
else 
{ 
    foreach($db->query("SELECT thumb, title, id, SUM(bronze + silver + gold + platinum) AS total FROM games GROUP BY id DESC") as $row) 
    { 
     echo " 
     <div class='game_row'> 
      <div class='thumb_box'><img src='../images/thumbs/$row[thumb]' width='87' height='48' alt='$row[title]' /></div> 
      <div class='info_box'> 
       <span class='game_name'><a href='trophies.php?action=edit&game_id=$row[id]'>$row[title]</a></span><br /> 
       <span class='game_trophy'>0 Of $row[total] Trophies</span> 
      </div> 
     </div>"; 
    } 
} 

Я пытался использовать присоединиться и РМКО уверен РМКО то отсутствует

Мой запрос с присоединиться

foreach($db->query("SELECT thumb, title, id, SUM(bronze + silver + gold + platinum) AS total FROM games JOIN trophies ON games.id = trophies.game_id GROUP BY id DESC") as $row) 

ошибка я получил

Предупреждение: Неверный аргумент поставляются для Еогеасп() в одной и той же линии

+1

'join' является одним из решений –

+0

@curious_coder я пытался присоединиться и получил ошибку Еогеасп я не знаете, как решить, не могли бы вы написать запрос с помощью coz? Я думаю, что iam отсутствует что-то – Zeroic

+0

Я согласен с curious_coder, если вы присоединитесь к двум таблицам, у вас будет вся ваша дата в одном объекте, так что вам не придется проходить через два разных набора данных. –

ответ

4

Вам нужно сделать:

$sqlres=$db->query("SELECT thumb, title, id, SUM(bronze + silver + gold + platinum) AS total FROM games JOIN trophies ON games.id = trophies.game_id GROUP BY id DESC"); 
while($row=$sqlres->fetch_assoc()) 
{ 
    echo $row["thumb"]; 
} 

В SQL, когда вы объединения необходимо указать таблицу поля:

SELECT g.thumb, g.title, g.id, SUM(t.bronze + t.silver + t.gold + platinum) AS total FROM games g JOIN trophies t ON g.id = t.game_id GROUP BY g.id DESC 
+0

У меня есть эта ошибка Нарушение ограничения целостности: 1052 Заголовок столбца в списке полей неоднозначно, а строка запроса и эта ошибка в следующей строке. Вызовите функцию-член fetch_assoc() для не-объекта в – Zeroic

+0

. 2 ответа ниже этого разрешает;) – Miguelo

+0

Ошибка вызвана тем, что в обеих таблицах есть 'title'. Чтобы избежать этого, вы можете указать как 'games.title' и' trophies.title' –

2

Попробуйте это:

$rows = $db->query("SELECT thumb, title, id, SUM(bronze + silver + gold + platinum) AS total FROM games JOIN trophies ON games.id = trophies.game_id GROUP BY id DESC"); 

foreach($rows as $r){ 
    echo $r->thumb //etc. 
} 

Ваш титул Ошибка sql заключается в том, что у вас есть две таблицы с тем же именем поля. Вы должны указать повторяющиеся поля в стандартном объединении, например: games.title, trophies.bronze и т. Д. (Это хорошая практика сделать это для всех, но требуется только для таблиц с одинаковыми полями. Следовательно, ошибка неоднозначных полей Я знаю, MySQL должен отображать лучшие ошибки. Слишком плохо Oracle купил их и не сосредоточился на нем.

И затем, пытаясь запустить цикл foreach в вашем sql-запросе после возвращения результатов запроса, чтобы вы может использовать его для повторения строк результата.

+0

Я пробовал ваш код и получил эту ошибку в строке запроса PDO :: query() [pdo.query]: SQLSTATE [23000]: Нарушение ограничения целостности: 1052 Заголовок столбца в списке полей неоднозначно в – Zeroic

1

вероятно поле идентификатор неоднозначен изменить ваш запрос

SELECT games.thumb, games.title, games.id, SUM(games.bronze + games.silver + games.gold + games.platinum) AS total FROM games JOIN trophies ON games.id = trophies.game_id GROUP BY games.id DESC" 
+0

. Я получил эту ошибку в строке запроса. Предупреждение: PDO :: query() [pdo .query]: SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец «game.thumb» в «списке полей» в – Zeroic

+0

Извините, игра должна быть играми (название вашей таблицы) – Miguelo