[英]SQL / PDO Query Optimisation
仍然關注SQL。
目前我正在使用2個PDO查詢。 我想要做的范圍如下:
- 首先,我需要將name
轉換為表ID
- 然后使用此ID,獲取companyID
與檢索到的表ID
匹配的人員
所以目前我有:( PS我知道有PDO的縮寫,我只是不在這個項目中使用它們來保持所有php腳本的一致性)
$prep = $DBH->prepare("SELECT Company.id FROM Company WHERE Company.name = :companyName LIMIT 1");
$prep->bindParam(":companyName", $_GET['companyName']);
$prep->execute();
$data = $prep->fetch();
$companyID = $data['id'];
$prep = $DBH->prepare("SELECT People.* FROM People WHERE People.companyID = :companyID");
$prep->bindParam(":companyID",$companyID);
$prep->execute();
我的印象是我可以使用某種JOIN
- 可能是一個INNER JOIN
,可以在一個查詢中執行此操作。
這可能嗎? - 如果是的話,非常感謝一個例子!
謝謝 !
是的,這是SQL 102。
你需要這個查詢:
SELECT People.*
FROM Company
JOIN People ON People.companyID = Company.id
WHERE Company.name = :companyName
ORDER BY People.Surname, People.Givename
我在猜測ORDER BY
子句中的列名。 但這會產生與單個查詢中的:companyName
相關聯的所有人員。 這很有效。 SQL就是這樣做的。
這是我的一個特殊偏見,但我喜歡使用子選擇。 這應該工作:
SELECT People.* FROM People
WHERE People.companyID IN
(SELECT Company.id FROM Company WHERE Company.name = :companyName LIMIT 1)
但這也可行:
-- Aliasing is optional
SELECT P.* FROM People AS P
JOIN Company C ON (P.companyID = c.id)
WHERE C.name = :companyName
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.