2013-05-22 166 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表結構: | counter |玩家|遊戲時間|

Stats_block是: | counter |玩家| blockID |

+0

請顯示您的表格結構(stats_player,stats_block)。我想我們可以在兩個表中找到一個玩家行(或者至少有同名的列)。順便說一句,沒有連接,你的查詢就沒有意義。 –

+0

我知道這沒有意義,這就是爲什麼我來這裏尋求幫助。雖然它沒關係。這些MODS或誰曾經標記過它,因爲我不知道我在做什麼。我希望我能問一個問題並獲得幫助,但是我只是因爲我的問題而導致錯誤。 – tec4

+0

不是downvoter ...有些人似乎很容易downvote「新人」。無論如何,不​​要介意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 AND St​​ats_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 = " ";