我对 SQL 还很陌生,正在尝试掌握最佳实践。我有一个关于使用 JOIN
的问题关键词。现在,我有一个<table>
在显示 SQL 表中的“实践”的前端,但前提是该“实践”具有当前用户(“经理”)拥有的“代表”。现在我正在做的是获取属于“经理”(当前登录用户)的“代表”,并循环遍历它们以获取“代表”的 id 并将其插入数组中。当我编写查询时,我会获取属于该数组中任何“代表性”id 的所有实践,并以这种方式构建我的查询:
// Grabbing the reps that are assigned to current user
$owned_reps_id = $database->run_query("SELECT id FROM reps WHERE owner={$_SESSION['current_user_id']}");
$owned_reps_array = array();
while($owned_rep = mysqli_fetch_assoc($owned_reps_id)){
// Throwing non-duplicate values in an array
if(!in_array($owned_rep['id'], $owned_reps_array)){
array_push($owned_reps_array, $owned_rep['id']);
}
}
// Building the query to only grab "practices" where it's `owner` column matches an id in the $owned_reps_array
$query = "SELECT * FROM practices WHERE";
if(!empty($owned_reps_array)){
foreach($owned_reps_array as $rep_owner){
$query .= " owner={$rep_owner}";
if (end($owned_reps_array) !== $rep_owner){
$query .= " OR";
}
};
};
$query .= " ORDER BY practice_name ASC";
$all_practices = $database->run_query($query);
我想知道我是否花了很长的时间来解决这个问题。这段代码确实按照我想要的方式工作,但我觉得我经历了很多只是为了得到结果。再说一遍,我正在做的是:
1) 获取“所有者”列中保存有当前经理 ID 的所有代表。
2) 在这些代表中,然后查看实践表并获取具有从代表中提取的任何 id 的所有实践。 (同样,“practices”SQL 表中有一个“owner”列,用于存储其所属“代表”的 ID)
这是我可以使用 JOIN
做的事情吗?还是我采取的路线有效?
最佳答案
尝试执行此查询:
SELECT
p.*
FROM
practices p
INNER JOIN reps r ON p.owner = r.id
WHERE
r.owner=:owner_id
ORDER BY
practice_name
(将 :owner_id
替换为数据库查询工具中的数字)
我最好用参数替换插值的 $_SESSION
,并进行一些清理,但这不是你的问题......
关于php - 在 SQL 中使用 JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35046903/