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