簡體   English   中英

從數據庫中ID匹配數組的兩個表中獲取信息?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM