[英]Get info from two tables in database where id match an array?
我有兩個表,一個是存儲不同價格的價格:
prices
appid de us ru nl gb
29382 899 999 1299 899 699
48371 1299 1599 1899 1299 999
58193 699 899 999 899 599
其他表格是游戲,其中存儲有關游戲的各種信息:
games
appid title releasedate controler language
29382 title 1 1358197200 1 en
48371 title 2 1329858000 0 en
58193 title 3 1201554000 1 en
如您所見,兩個表具有相同的appid,我需要將其與json文件中的外部id匹配
最后,我有一個看起來像這樣的json文件:
{
"response": {
"games": [
{
"appid": 58193,
"playtime_forever": 0
},
{
"appid": 29382,
"playtime_forever": 0
},
{
"appid": 48371,
"playtime_forever": 151
}
]
}
}
現在,如果這只是從一個基於json字段的表中提取信息,我就會知道該怎么做,但對我來說,這似乎有點復雜。 我嘗試了各種解決方案,但從未找到可行的解決方案。
我現在擁有的最終代碼是:
$listusergames = json_decode(file_get_contents('http://path_to_file.json'));
foreach ($listusergames->response->games as $game) {
$gameid = $game->appid;
$querygamename = mysqli_query($conn, "SELECT * FROM games WHERE appid='$gameid'");
$rowgame = mysqli_fetch_array($querygamename);
if($rowgame[0] > 1 ) {
echo 'Your game: ' . $rowgame['title'] . ' is worth $' . $rowgame['us'] . ' and game id is - '. $gameid . '<br/>';
}
}
在這段代碼中,$ rowgame ['us']現在無效,因為我不知道如何基於json字段從兩個表中提取數據。
在我現在擁有的解決方案中,每個appid都從json文件中提取,然后我根據json文件中的appid值從游戲表中選擇了所有值,並使用了if($ rowgame [0]> 1),因為否則它將回顯數據庫中不存在的json文件中每個appid的空行。
但是我不知道如何選擇兩個表並從一個表中顯示游戲標題,以及從另一個表中顯示不同的價格,並將它們與json文件中的appid匹配,如果數據庫中不存在appid,則跳過該appid。
編輯:一個更快的問題,因為mysql_query在foreach循環中不會消耗太多資源,因為將對每個$ game執行查詢,所以如果我有500個游戲,則每個循環將有500個查詢,這使我的網站非常有用慢,還是我錯了?
更新查詢以聯接兩個表:
SELECT g.*, p.* FROM games g
LEFT JOIN prices p on (g.appid = p.appid)
WHERE g.appid='$gameid'
傳統上,您可以將JSON結果中的數組implode()
成一個字符串,然后使用WHERE / IN SQL語句。 但是,由於您正在查看對象的appid參數,而不是簡單的數組,因此,如果不付出額外的努力,就無法實現implode()
。
您可以通過JSON結果foreach()
來構建查詢,並僅執行一條MySQL語句即可節省一些開銷。
完整的更新代碼:
// Grab JSON list
$listusergames = json_decode(file_get_contents('http://path_to_file.json'));
// Setup new array
$games = array();
// Add member to array for each game's appid
// Resulting array looks like ( [0]=>'58193', [1]=>'29382', [2]=>'48371 )
foreach ($listusergames->response->games as $game) {
$games[] = $game->appid;
}
// Implode games array into a comma-separated string like: "58193,29382,48371"
$games_list = implode( ',' , $games );
// Updated SQL statement using WHERE/IN list
$querygamename = mysqli_query($conn, "SELECT g.*, p.* FROM games g
LEFT JOIN prices p on (g.appid = p.appid)
WHERE g.appid IN ($games_list) ");
// Loop through result set
while ( $rowgame = mysqli_fetch_array($querygamename) ){
if($rowgame[0] > 1 ) {
echo 'Your game: ' . $rowgame['title'] . ' is worth $' . $rowgame['us'] . ' and game id is - '. $gameid . '<br/>';
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.