我应该在这种情况下使用哪种SQL查询
我在MySQL中有一个表tbl_comments
。表中有四个字段user_name
,comment_id
,user_likes
,user_dislikes
。 user_likes
和user_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查询可以给我想要的结果?
我猜,你正在使用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”和“用户不喜欢”实际采用了什么,以及为什么用逗号分隔用户名?所以条件保持不变。
用户正在使用MySQL,而不是SQL Server。 – halfer 2013-03-03 08:57:38
谢谢,但如何访问这个值,我的意思是没有与此指定的字段名称。 – 2013-03-03 09:08:52
我已经采取了在我自己之前使用逗号分隔值的陷阱。这里有关于这个问题的一个很好的答案:Is storing a delimited list in a database colum really that bad?
你将不得不使用LIKE'%user_name%',这从效率的角度来看并不好。尝试查看数据库规范化。
(我的第一篇#2 :))
感谢您的建议。其实,我忽略了这个事实。但是当我阅读你给定的文章和参考文献时,它给了我很多帮助。感谢这个宝贵的建议。我不想影响效率。 – 2013-03-03 10:20:41
我想你会与你的应用程序,如果你有一列内以CSV格式外键的列表遇到麻烦。我建议改变你的设计,以便你有一个新的表'user_opinion',它连接'from_user_id','to_user_id','type'(类型是L或D)。 – halfer 2013-03-03 09:00:56
其实我正在开发一个论坛。而你的建议看起来很有价值。我想我应该重新设计我的数据库。你可以请参考我可以帮助我在这方面的任何好的文章,教程等。因为我希望我的应用程序更高效。 – 2013-03-03 10:24:12
没有必要的教程能够帮助你解决这个具体的问题,但是如果你了解了数据库的规范化,就像Andre所说的那样,这肯定会有所帮助。另外需要注意的是:开发一个用于学习目的的论坛是很好的,但是请记住,已经有很多成熟的,经过充分测试的PHP论坛软件包了! – halfer 2013-03-03 12:05:24