SQL SELECT到多个表

时间:2014-11-24 15:41:05

标签: php mysql sql

我有一个基本的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();

它正在工作但似乎很多代码并非如此。有没有办法只在一个查询中执行此操作?

2 个答案:

答案 0 :(得分:1)

这样的事情怎么样:

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

明确列出所有选定字段而不是使用*

也是一种很好的做法

答案 1 :(得分:0)

您可以将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;