3

我正在尝试将 3 个表连接在一起,但我在字段列表中不断收到“未知表”调用。我知道表'调用'存在

这有效...

$sql = "SELECT * FROM calls WHERE id = '$diary_id'";

但这并不...

$sql = "SELECT * FROM (SELECT calls.id AS calls_id, calls.assigned_user_id AS assigned_user) calls
RIGHT JOIN accounts on accounts.parent_id = accounts.id
LEFT JOIN users on assigned_user = user.id
WHERE calls_id = '$diary_id'";

我正在尝试使用别名,因为我尝试加入的表具有相同的字段名称(我必须使用继承的数据库)。

任何帮助将不胜感激

4

1 回答 1

7

您的子查询:

SELECT calls.id AS calls_id, calls.assigned_user_id AS assigned_user

正在选择calls.idcalls.assigned_user但没有定义表/别名的FROM子句。calls添加FROM calls到子查询(尽管为什么要在这里使用子查询?)。

您还在user.id连接标准中提到,但该表称为users.

并且您的帐户表的连接标准accounts.parent_id = accounts.id看起来非常可疑:您似乎正在尝试遍历使用邻接列表模型存储的分层数据,但是此连接无法实现;事实上,MySQL 不支持递归函数——所以它根本不适合这个模型。您可能会考虑重组数据以使用嵌套集或闭包表。有关更多信息,请参阅此答案

反而:

SELECT *
FROM   calls
  RIGHT JOIN accounts ON accounts.parent_id  = accounts.id -- is this right?
   LEFT JOIN users    ON calls.assigned_user = user.id
WHERE calls.id = '$diary_id'
于 2012-08-31T17:31:25.983 回答