簡體   English   中英

SQL / PDO查詢優化

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

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