2012-08-31 39 views
1

我想一起加入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

你的子查詢:

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

是選擇calls.idcalls.assigned_user但從中calls表/別名沒有定義FROM條款。將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' 
+0

點上,謝謝 – tatty27

+0

你是正確的,當宇說accounts.parent_id看起來有點狡猾,它應該是calls.parent_id = account.id。我一直在看這幾個小時,並且因爲我錯過了從句,多次重寫了它 – tatty27