我正在尝试将 3 个表连接在一起,但我一直在字段列表中收到“未知表“调用”。我知道表 'calls' 存在
这工作...
$sql = "SELECT * FROM calls WHERE id = '$diary_id'";
Run Code Online (Sandbox Code Playgroud)
但这不...
$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'";
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用别名,因为我尝试加入的表具有相同的字段名称(我必须使用继承的数据库)。
任何帮助将不胜感激
您的子查询:
SELECT calls.id AS calls_id, calls.assigned_user_id AS assigned_user
Run Code Online (Sandbox Code Playgroud)
正在选择calls.id并且calls.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'
Run Code Online (Sandbox Code Playgroud)