2013-05-22 5 views
0

Я пытаюсь запросить пять таблиц. Я могу запросить одну из таблиц сИспользование PHP для получения данных из нескольких таблиц базы данных

$query = "SELECT * FROM Stats_player WHERE player='$user'"; 

Однако, когда я пытаюсь запросить другую таблицу с

$query = "SELECT * FROM Stats_player, Stats_block WHERE player='$user'"; 

перерывов на сайте. Вот код, который я использую для эхо-данных на экране

<?php 
if ($result = $mysqli->query($query)) { 
echo "<img src=\"https://minotar.net/avatar/{$user}/100\"><h1>{$user}</h1><br/>"; 
    while ($row = $result->fetch_assoc()) { 
     //variables 
     $play_time = $row['playtime']/3600; 
     $play_time = round($play_time, 1); 
     $xpgained = $row['xpgained']; 
     $damagetaken = $row['damagetaken']; 
     $toolsbroken = $row['toolsbroken']; 
     $itemscrafted = $row['itemscrafted']; 
     $itemseaten = $row['omnomnom']; 
     $commandsused = $row['commandsdone']; 
     $teleports = $row['teleports']; 
     $itemspickedup = $row['itempickups']; 
     $itemsdroped = $row['itemdrops']; 
     $lastseen = date("F j, Y ", strtotime($row['lastjoin'])); 
     //end of variables 
      echo "<p>Time on Server: {$play_time} HRS</p>"; 
      echo "<p>Last Seen: {$lastseen}"; 
      echo "<p>Commands Used: {$commandsused}"; 
      echo "<p>XP Gained: {$xpgained}"; 
      echo "<p>Blocks broken: {$row['blockID']}"; //this is data from the table Stats_block 
     } 
    $result->free(); 
} 
$mysqli->close(); 
?> 

Любые идеи о том, как я могу это сделать?

Табличный конструктор Stats_player: | счетчик | игрок | Время воспроизведения |

Stats_block: | счетчик | игрок | blockID |

+0

показать свою структуру таблицы (stats_player, stats_block), пожалуйста. Я бы предположил, что мы можем найти строку игрока в обеих таблицах (или, по крайней мере, столбцы с тем же именем). Кстати, ваш запрос не имеет никакого смысла без объединения. –

+0

Я знаю, что это не имеет смысла, поэтому я пришел сюда за помощью. Хотя это не имеет значения. Моды или кто когда-либо отмечал это, потому что я точно не знаю, что я делаю. Хотелось бы, чтобы я мог задать вопрос и получить помощь, но вместо этого я просто потерял заметку, потому что у меня была ошибка в том, как я спросил. – tec4

+0

Не the downvoter ... Некоторые люди, похоже, легко опускают «новички». В любом случае, не обращайте внимания на downvotes и попытайтесь изменить свой вопрос. –

ответ

0
$query = "SELECT * FROM Stats_player, Stats_block WHERE player='$user'" 

Это очень вероятно, неправильно. Вы должны использовать JOIN operator.

Здесь вы делаете декартовую продукцию двух таблиц, это вряд ли то, что вы хотите. И это может привести к переполнению вашего ресурса (памяти и т. Д.), Если в таблицах много строк.

Что-то вроде

$query = "SELECT * FROM Stats_player p, Stats_block b 
WHERE p.block_id = b.id AND p.player='$user'" 

или

$query = "SELECT * FROM Stats_player p INNER JOIN Stats_block b ON p.block_id = b.id 
WHERE p.player='$user'" 

или, может быть, LEFT OUTER JOIN ...

Точную запроса будет зависеть от вашей схемы.

+0

, так что означают p и b в «Stats_player p, Stats_block b «это просто похожие переменные? – tec4

+0

b и p - псевдонимы. Они проще в использовании, чем полные имена таблиц, но далеко не обязательные. Подставка для: SELECT * FROM Stats_player, Stats_block WHERE Stats_player.block_id = Stats_block.id И Stats_player.player = '$ user' – ChristopheBrun

+0

Я верю, что понял. благодаря! – tec4

0

Не видя структуры обеих таблиц, что-то подобное может работать.

SELECT columnList 
FROM Stats_player a 
LEFT JOIN Stats_block b ON b.player = a.player 
WHERE a.player = '$user' 
0

Вы пробовали что-то вроде этого:

SELECT 
table1.field1, table1.field2, table2.field1, table2.field2 
FROM 
table1, table2 
WHERE 
table1.field1 = " " and table2.field1 = " "; 
Смежные вопросы