簡體   English   中英

SQL SELECT到多個表

[英]SQL SELECT to multiple table

我有一個基本的SQL SELECT函數:

$stmt = $mysqli->prepare("SELECT a.*,
                            b.nom_organisation
                            FROM roster a
                            INNER JOIN organisation b
                            ON a.id_organisation = b.id_organisation 
                            WHERE a.id_roster = ? LIMIT 1");

if ($stmt) {
    $stmt->bind_param('i', $id_roster);  // Bind "$email" to parameter.
    $stmt->execute();    // Execute the prepared query.
    $stmt->store_result();

// get variables from result.
$stmt->bind_result($id_roster, $nom_roster, $description_roster, $created_by, $creation_date, $nom_organisation);
$stmt->fetch(); 

我得到一個名為$ created_by的變量

此變量是整數(用戶ID)。 我需要訪問另一個名為“ membre”的表。 獲取用戶的名稱和姓氏。 現在我在做另一個查詢:

$stmt = $mysqli->prepare("SELECT a.first_name,
                                a.last_name
                            FROM membre a
                            WHERE a.id_membre = ? LIMIT 1");

    $stmt->bind_param('i', $created_by);  // Bind "$email" to parameter.
    $stmt->execute();    // Execute the prepared query.
    $stmt->store_result();

它正在工作,但是似乎很多代碼沒那么多。 是否只有一種查詢可以做到這一點?

這樣的事情怎么樣:

SELECT r.id_roster
    , r.nom_roster
    , r.description_roster
    , r.created_by
    , r.creation_date
    , o.nom_organisation
    , m.first_name
    , m.last_name
FROM roster r
INNER JOIN organisation o ON r.id_organisation = o.id_organisation
INNER JOIN member m ON r.created_by = m.id_membre
WHERE r.id_roster = ? LIMIT 1

顯式列出所有選定字段而不是使用*也是一個好習慣

您可以將membre表加入原始查詢嗎? 這將以與您在第一個查詢中使用的內部聯接類似的方式進行。 您可以再次使用內部聯接,也可以使用左聯接。 使用第二個聯接意味着您不需要執行兩個單獨的查詢。

有關SQL連接的更多信息,您可能會發現http://dev.mysql.com/doc/refman/5.0/en/join.html有用。 它包含幾個連接示例,例如:

內部聯接:

SELECT * FROM table1 INNER JOIN table2 ON table1.id=table2.id;

左聯接:

SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id;

暫無
暫無

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

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