Php 在SQL中使用JOIN

Php 在SQL中使用JOIN,php,mysql,Php,Mysql,我对SQL相当陌生,正在努力掌握最佳实践。我有一个关于使用JOIN关键字的问题。现在,我在前端有一个,显示SQL表中的“实践”,但前提是该“实践”有一个当前用户(“经理”)拥有的“代表”。现在我正在做的是抓取属于“经理”(当前登录用户)的“代表”,并循环通过这些“代表”来抓取“代表”的id,并将其推送到一个数组中。当我编写查询时,我将获取属于该数组中任何“代表”id的所有实践,并以这种方式构建查询: // Grabbing the reps that are assigned to curren

我对SQL相当陌生,正在努力掌握最佳实践。我有一个关于使用
JOIN
关键字的问题。现在,我在前端有一个
,显示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
(用DB查询工具中的数字替换
:所有者id


我最好用参数替换插值的
$\u会话
,并进行一些清理,但这不是你的问题…

是的,你应该使用连接。SQL是用来连接表的,它比您的代码更有效。