我在MySQL中有一个表tbl_comments
。表格中有四个字段user_name
,comment_id
,user_likes
,user_dislikes
。 user_likes
和user_dislikes
字段的类型为VARCHAR,这两个字段中有逗号分隔的user_names。
我有以下查询:
$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 :(得分: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 内的条件。 但我不明白用户是什么'并且'用户不喜欢'实际上,以及为什么逗号分隔的用户名?因此条件保持不变。
答案 1 :(得分:0)
我在自己面前使用逗号分隔值的陷阱。这是关于这个主题的一个很好的答案:Is storing a delimited list in a database colum really that bad?
您必须使用LIKE'%user_name%',从效率的角度来看,这并不好。尝试研究数据库规范化。
(我在Stackoverflow上的第一篇文章:))