我正在尝试将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'";
我正在尝试使用别名,因为我尝试加入的表具有相同的字段名称(我必须使用的是继承的数据库)。
非常感谢任何帮助
答案 0 :(得分:4)
您的子查询:
SELECT calls.id AS calls_id, calls.assigned_user_id AS assigned_user
正在选择calls.id
和calls.assigned_user
,但没有FROM
子句,calls
表/别名已定义。将FROM calls
添加到子查询中(尽管为什么要在这里使用子查询?)。
您在加入条件中也指user.id
,但该表名为users
。
您对帐户表的加入条件accounts.parent_id = accounts.id
看起来非常可疑:您似乎正在尝试遍历使用邻接列表模型存储的分层数据,但此连接将无法完成那;实际上,MySQL不支持递归函数 - 所以它根本不适合这个模型。您可以考虑重构数据以使用嵌套集或闭包表。有关详细信息,请参阅this answer。
相反:
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'