我对SQL很新,并且正在努力掌握最佳实践。我对使用JOIN
关键字有疑问。现在,我的前端有<table>
,显示&#34;练习&#34;来自SQL表,但仅限于&#34;实践&#34;有一个代表&#34;由当前用户拥有(&#34;经理&#34;)。现在我正在做的是抓住&#34;代表&#34;属于&#34;经理&#34; (当前登录的用户)并循环访问这些以获取&#34;代表&#34;的ID并将其推入一个数组。当我写下我的查询时,我抓住了属于任何&#34;代表&#34;的所有做法。 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)抓住所有拥有当前经理身份的代表保存在&#39;所有者&#39;列。
2)在这些代表中,然后查看实践表,并抓住所有从代表中提取任何ID的做法。 (同样,&#34;实践&#34; SQL表中存在&#39;列,其中存储了&#34;代表&#34;它所拥有的ID)
这是我可以使用JOIN
做的事情,还是我采取的有效路线?
答案 0 :(得分:0)
尝试执行此查询:
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
,并进行一些清理,但这不是你的问题......