我有一个基本的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();
它正在工作但似乎很多代码并非如此。有没有办法只在一个查询中执行此操作?
答案 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;