2013-03-17 96 views
0

我已經建立了以下查詢: SQL查詢privatemsgs按錯誤

 
(SELECT 
    privatemsgs.id, 
    privatemsgs.useradn, 
    privatemsgs.useraid, 
    privatemsgs.title, 
    privatemsgs.created, 
    privatemsgs.timee, 
    privatemsgs.isread, 
    u.photo AS creatorphoto, 
    privatemsgs.relatedto 
FROM privatemsgs 
LEFT JOIN 
    users AS u ON(privatemsgs.useraid = u.id) 
WHERE userbid='5' 
    AND relatedto=0 and bdel=1) 
UNION ALL 
(SELECT 
    privatemsgs.id, 
    privatemsgs.useradn, 
    privatemsgs.useraid, 
    privatemsgs.title, 
    privatemsgs.created, 
    privatemsgs.timee, 
    privatemsgs.isread, 
    u.photo AS creatorphoto, 
    rel.relatedto 
FROM privatemsgs AS rel 
    JOIN privatemsgs ON(rel.relatedto = privatemsgs.id) 
    LEFT JOIN 
    users AS u ON(rel.useraid = u.id) 
WHERE rel.userbid='5') 
GROUP BY id 
ORDER BY timee DESC 

這個查詢從表中選擇所有Privatemsgs,並表現得像個郵件,爲前:

如果我發了msg給用戶b,用戶b回答我。我想在每個用戶的收件箱和發件箱中顯示msg。

對個人消息的評論標記爲「relatedto」主消息的ID。

查詢工作,但在顯示重複的MSG(同味精顯示很多次) 我爲了試圖做「GROUP BY ID」來修復它,但我得到了錯誤:

 
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY id ORDER BY timee DESC' 

THANK您!!

+1

錯誤,味精,它說'GROUP BY願意與我們ORDER BY timee DESC' - 應該不是很'按時間降序排列'而不是? – michi 2013-03-17 02:01:21

+0

'GROUP BY relatedto'甚至不在您顯示的查詢中。 – CBroe 2013-03-17 02:05:30

+0

我不能放任何GROUP BY語句(不是ID和不相關)我編輯了這個問題 – GuyChabra 2013-03-17 02:06:43

回答

0

首先,根據PM 77的評論,工會而不是工會都將解決您的重複問題。你根本不需要group by子句。

其次,您可能有邏輯錯誤。頂部有你的工會查詢有這樣的:

FROM privatemsgs 
LEFT JOIN 
users AS u ON(privatemsgs.useraid = u.id) 
WHERE userbid='5' 
AND relatedto=0 and bdel=1) 

如果WHERE子句中的任意字段都在用戶表,你LEFT JOIN已成爲內連接。爲了保持它作爲一個左連接,你必須把所有的過濾器的加入,就像這樣:

FROM privatemsgs 
LEFT JOIN 
users AS u ON privatemsgs.useraid = u.id 
AND userbid='5' 
AND relatedto=0 and bdel=1)