php - 在 SQL 中使用 JOIN

标签 php mysql

我对 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/

相关文章:

MySQL/ASP 分页,COUNT 与 LIMIT

php - 内连接和左连接

mysql - 如何比较 MySQL 中同一字段的两个不同值?

PHP 正在向 MySQL 插入问号

PHP + AJAX 代码 - 显示从列表中选择值的数据

mysql - 具有多个参数的 Golang 数据库/sql.DB.QueryRow

mysql - 返回 2 个表中相同 ID 的结果

javascript - HTML 5 日期选择器在以 Angular 发送数据 ajax 时显示日期前一天

javascript - 在 JS 和 PHP 中需要相同的类,处理这个问题的正确方法是什么?

php - 带进度条的 CSV 导入