2016-05-06 92 views
2

我有三張桌子。如何修復多個查詢連接中的重複行?

|-----------------| 
| user_id | Name | 
|-----------------| 
| 1  | Raj | 
|-----------------| 
| 2  | Khaj | 
|-----------------| 
| 3  |Khujli | 
|-----------------| 

|--------------------------------------| 
| post_id | Title | Desc   | 
|--------------------------------------| 
|  1 | test1 | hello   | 
|--------------------------------------| 
|  2 | test 2 | Hello World | 
|--------------------------------------| 

|--------------------------------------------------| 
| comment_id | post_id | user_id | comment | 
|--------------------------------------------------| 
|  1  |  1  |  1  | Nice  | 
|--------------------------------------------------| 
|  2  |  2  |  1  | Bad Thing | 
|--------------------------------------------------| 
|  3  |  2  |  2  | Hulla | 
|--------------------------------------------------| 
|  4  |  1  |  A  | Lol  | 
|--------------------------------------------------| 
|  5  |  2  |  A  | Arse | 
|--------------------------------------------------| 
|  6  |  1  |  3  | Nice | 
|--------------------------------------------------| 

現在我使用的查詢:

SELECT * 
FROM tbl_comment, tbl_post, tbl_user 
WHERE tbl_post.post_id = tbl_comment.post_id 
    AND tbl_post.post_id = '$post_id' 
    AND (tbl_user.user_id = tbl_comment.user_id 
      OR (tbl_comment.user_id = 'A' 
       AND tbl_post.post_id = '$post_id')) 

user_id = 'A'意味着管理員,但它不是在tbl_user表中列出。它僅在tbl_comment表中被提及爲'A'

通過上面的查詢,我得到了兩行,在user_id = 'A'的特定帖子上發表了一條評論。

我該如何解決這個問題?查看圖像,兩行具有相同的值。我想要唯一的行,而不是重複的行。

enter image description here

+0

不清楚你想要選擇什麼;想僅選擇來自用戶的評論(不是管理員)?或來自管理員(不是用戶)的評論或...?,在示例結果表中顯示正確結果 –

+0

@Mahmood_M ....讓我上傳一張圖片。這會幫助你理解。 – Saswat

+0

@Mahmood_M ....上傳了一張圖片..它會幫助你理解。 – Saswat

回答

0

試試這個(沒有測試

SELECT * 
FROM tbl_comment 
INNER JOIN tbl_post ON tbl_post.post_id = tbl_comment.post_id 
LEFT JOIN tbl_user ON tbl_user.user_id = tbl_comment.user_id 
WHERE tbl_comment.post_id = '$post_id' 

我強烈建議使用JOIN ON子句連接表 - 更容易閱讀和排查修復。

0

您得到重複項,因爲在WHERE子句的第二部分中,您沒有對tbl_user表進行任何限制。因此,對於tbl_user表中的每條記錄,當評論的用戶ID爲「A」時,您會在輸出中得到重複。

我也建議你使用ANSI語法,其中它涉及連接表,就像這樣:

SELECT * 
FROM  tbl_comment 
INNER JOIN tbl_post 
     ON tbl_post.post_id = tbl_comment.post_id 
LEFT JOIN tbl_user 
     ON tbl_user.user_id = tbl_comment.user_id 
WHERE  tbl_post.post_id = '$post_id' 
     AND (tbl_user.user_id IS NOT NULL OR tbl_comment.user_id = 'A') 

WHERE子句中的最後一行是可選的,但如果有絲毫的機會可能是必要的,你在評論表中有無效的用戶標識值。根據您的期望,您可能不希望輸出這些記錄。