簡體   English   中英

使用連接查詢兩個表

[英]Using Joins to query two tables

我有兩個表,“庫存”和“inventory_type”。 “inventory”表存儲它的名稱和類型,“inventory_type”表存儲類型名稱,如RAM,CPU等,以及排序順序。 我之前從未使用過JOINS,我不確定使用哪種類型,但它們似乎都不適用於以下代碼。

作為一個附帶問題,使用下面的代碼,“庫存”是左表還是“inventory_type”會在左邊加入?

function getInventoryOptions($db, $default_value, $datacenter)
{
    $query = "SELECT inventory.id, inventory.name, inventory_type.short_name
                FROM inventory LEFT JOIN inventory_type
                ON inventory.type = inventory_type.id WHERE inventory.datacenter = " . $datacenter . " ORDER BY inventory_type.sort_order ASC";

    $result = mysql_query($query, $db);

    echo '<option value="">None</option>';

    if ($result)
    {
        while($row = mysql_fetch_array($result))
        {
            $id = $row["inventory.id"];
            $name = $row["inventory.name"];
            $type = $row["inventory_type.short_name"];

            if ($default_value == $id)
            {
                echo '<option selected value="' . $id . '">' . $type . ": " . $name . '</option>';
            }
            else
            {
                echo '<option value="' . $id . '">' . $type . ": " . $name . '</option>';
            }
        }
    }
}

我認為問題出在這里:

$id = $row["inventory.id"];
$name = $row["inventory.name"];
$type = $row["inventory_type.short_name"];

嘗試:

$id = $row['id'];
$name = $row['name'];
$type = $row['short_name'];

*請注意,mysql擴展現在已棄用 ,將來某個時候將被刪除 那是因為它古老,充滿了不良做法,缺乏一些現代特色。 不要用它來編寫新代碼。 請改用PDOmysqli_ *

UPDATE

這相當於你在mysqli中的函數:

function getInventoryOptions($db, $default_value, $datacenter)
{
     $query = "SELECT inventory.id, inventory.name, inventory_type.short_name
               FROM inventory LEFT JOIN inventory_type
               ON inventory.type = inventory_type.id WHERE inventory.datacenter = " . $datacenter . " ORDER BY inventory_type.sort_order ASC";

$link = mysqli_connect("[your_host]","[your_user]","[password]","[database]") or die("Error " . mysqli_error($link));



//execute the query.

$result = $link->query($query);

//display information:

while($row = mysqli_fecth_array($result)) {

        $id = $row['id'];
        $name = $row['name'];
        $type = $row['short_name'];

        if ($default_value == $id)
        {
            echo '<option selected value="' . $id . '">' . $type . ": " . $name . '</option>';
        }
        else
        {
            echo '<option value="' . $id . '">' . $type . ": " . $name . '</option>';
        }
} 

假設inventory.typenot null (請確認),則不需要LEFT JOIN INNER JOIN將成功。

由於您只需要一個關聯數組,請考慮使用mysql_fetch_assoc()而不是mysql_fetch_array() ,或者將MYSQL_ASSOC指定為第二個參數。

此外,考慮完全移植到mysqliPDO (參見其他人的回復)。

返回的關聯數組的鍵是普通字段名稱,沒有表名部​​分。

最后,對於您的問題,是的, inventory將是左表,其所有記錄都參與結果,無論inventory_type表中是否有相應的記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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