繁体   English   中英

SQL 多个 JOIN 到同一列

[英]SQL multiple JOIN to the same column

我有3张桌子

结果表

outcome_id,结果

参考表

refs_id, branchno, colleagueid, colleague2id, 日期戳

同事表

colleague_id、姓名、分支机构

这是我用来绘制同事姓名而不是编号的 mysqli 语句。 这也适用于结果而不是 outcome_id。

我遇到的问题是我无法将 colleague2id 加入同事表中的名称。

SELECT * FROM refs
JOIN colleague ON colleague.colleague_id=refs.colleagueid
JOIN outcome ON outcome.outcome_id=refs.outcome
WHERE branchno ='{$_SESSION["branchinfo"]["storeno"]}'

输出到 PHP

echo "<td>".$row["refs_id"])."</td>" . "
    <td>".$row['name'] . "</td>
    <td>".$row['colleague2id'] . "</td>
    <td>".$row['outcome'] . "</td>      

如何让$row['colleague2id']显示colleague.name而不是 ID 号码?

抱歉,如果格式不正确,这是我的第一篇文章。

您需要两个同事表连接(使用别名 a 和 b )

  SELECT * 
  FROM refs
  JOIN colleague  as a ON a.colleague_id=refs.colleagueid
  JOIN colleague  as b ON b.colleague_id=refs.colleague2id
  JOIN outcome ON outcome.outcome_id=refs.outcome
  WHERE branchno ='{$_SESSION["branchinfo"]["storeno"]}'

但为了明确选择,您应该明确设置列名

由于refs表中有两个colleagueid s,您需要JOIN colleague表两次才能获取这两个列的名称。

查询应该是:

SELECT refs_id, branchno, colleagueid, colleague2id, datestamp,
       c1.name AS colleague1name, c2.name AS colleague2name,
       outcome_id, o.outcome
    FROM refs
         JOIN colleague c1 ON c1.colleague_id = refs.colleagueid
         JOIN colleague c2 ON c2.colleague_id = refs.colleague2id
         JOIN outcome   o  ON o.outcome_id    = refs.outcome
    WHERE branchno ='{$_SESSION["branchinfo"]["storeno"]}'

然后,PHP 可以访问这些名称:

$row['colleague1name']
$row['colleague2name']

唯一应该考虑的是上面的查询容易受到 SQL 注入攻击,因此应该使用MySQLiPDO来实现准备好的语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM