2013-03-03 248 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

相关问题