2013-03-03 245 views
0

我在MySQL中有一個表tbl_comments。表中有四個字段user_namecomment_iduser_likesuser_dislikesuser_likesuser_dislikes字段的類型爲VARCHAR,在這兩個字段中有逗號分隔的用戶名。我應該在這種情況下使用哪種SQL查詢

我有以下查詢:

$query = "SELECT * FROM tbl_comments WHERE comment_id=223"; 

我的問題是我也想通過USER_NAME與此查詢,並得到下面的輸出

1. 0 (if user_name does not exist in user_likes and user_dislikes) 
2. 1 (if user_name exists in user_likes) 
3. 2 (if user_name exists in user_dislikes) 

哪些SQL查詢可以給我想要的結果?

+0

我想你會與你的應用程序,如果你有一列內以CSV格式外鍵的列表遇到麻煩。我建議改變你的設計,以便你有一個新的表'user_opinion',它連接'from_user_id','to_user_id','type'(類型是L或D)。 – halfer 2013-03-03 09:00:56

+0

其實我正在開發一個論壇。而你的建議看起來很有價值。我想我應該重新設計我的數據庫。你可以請參考我可以幫助我在這方面的任何好的文章,教程等。因爲我希望我的應用程序更高效。 – 2013-03-03 10:24:12

+0

沒有必要的教程能夠幫助你解決這個具體的問題,但是如果你瞭解了數據庫的規範化,就像Andre所說的那樣,這肯定會有所幫助。另外需要注意的是:開發一個用於學習目的的論壇是很好的,但是請記住,已經有很多成熟的,經過充分測試的PHP論壇軟件包了! – halfer 2013-03-03 12:05:24

回答

0

我猜,你正在使用SQL Server:

SELECT *, 
CASE 
WHEN (if user_name does not exist in user_likes and user_dislikes) THEN O 
WHEN (if user_name exists in user_likes) THEN 1 
WHEN (if user_name exists in user_dislikes) THEN 2 
END 
FROM tbl_comments WHERE comment_id=223 

這大約是你所需要的。請根據您的使用情況更改WHEN中的條件。 但我不明白「user_likes」和「用戶不喜歡」實際採用了什麼,以及爲什麼用逗號分隔用戶名?所以條件保持不變。

+0

用戶正在使用MySQL,而不是SQL Server。 – halfer 2013-03-03 08:57:38

+0

謝謝,但如何訪問這個值,我的意思是沒有與此指定的字段名稱。 – 2013-03-03 09:08:52

0

我已經採取了在我自己之前使用逗號分隔值的陷阱。這裏有關於這個問題的一個很好的答案:Is storing a delimited list in a database colum really that bad?

你將不得不使用LIKE'%user_name%',這從效率的角度來看並不好。嘗試查看數據庫規範化。

(我的第一篇#2 :))

+0

感謝您的建議。其實,我忽略了這個事實。但是當我閱讀你給定的文章和參考文獻時,它給了我很多幫助。感謝這個寶貴的建議。我不想影響效率。 – 2013-03-03 10:20:41

相關問題