在SQL

时间:2016-01-27 20:00:01

标签: php mysql

我对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做的事情,还是我采取的有效路线?

1 个答案:

答案 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,并进行一些清理,但这不是你的问题......