SQL / PDO 查询优化
SQL / PDO Query Optimisation
仍在思考 SQL.
目前我正在使用 2 个 PDO 查询。我尝试做的范围如下:
- 首先我需要将 name
转换为 table ID
- 然后使用此 ID,获取 companyID
与检索到的 table ID
匹配的人
所以目前我有:(PS 我知道有 PDO 速记,我只是为了在所有 php 脚本之间保持一致,我没有在这个项目 atm 中使用它们)
$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
能够在单个查询中执行此操作。
这可能吗? - 如果是,将不胜感激!
谢谢!
这是我的一个特殊偏见,但我喜欢使用子select。这应该有效:
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
是的,这是SQL102。
您需要这个查询:
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为此而生。
仍在思考 SQL.
目前我正在使用 2 个 PDO 查询。我尝试做的范围如下:
- 首先我需要将 name
转换为 table ID
- 然后使用此 ID,获取 companyID
与检索到的 table ID
所以目前我有:(PS 我知道有 PDO 速记,我只是为了在所有 php 脚本之间保持一致,我没有在这个项目 atm 中使用它们)
$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
能够在单个查询中执行此操作。
这可能吗? - 如果是,将不胜感激!
谢谢!
这是我的一个特殊偏见,但我喜欢使用子select。这应该有效:
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
是的,这是SQL102。
您需要这个查询:
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为此而生。