【问题标题】:Which SQL Query Should I Use in this Situation在这种情况下我应该使用哪个 SQL 查询
【发布时间】:2013-03-03 08:32:13
【问题描述】:

我在 MySQL 中有一个表 tbl_comments。表中有user_namecomment_iduser_likesuser_dislikes四个字段。 user_likesuser_dislikes 字段的类型为 VARCHAR,并且在这两个字段中有逗号分隔的用户名。

我有以下疑问:

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

我的问题是我也想通过这个查询传递用户名并得到以下输出

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 查询可以给出我想要的结果?

【问题讨论】:

  • 我认为如果您在单个列中有 CSV 格式的外键列表,您的应用程序会遇到问题。我建议更改您的设计,以便您有一个新表user_opinion,它连接from_user_idto_user_idtype(其中类型是L 或D)。
  • 其实我正在开发一个论坛。你的建议看起来很有价值。我想我应该重新设计我的数据库。您能否请我参考任何可以在这方面帮助我的好文章、教程等。因为我希望我的应用程序更高效。
  • 不一定有教程可以帮助您解决这个特定问题,但是如果您按照 Andre 的建议了解数据库规范化,那肯定会有所帮助。另一方面:开发一个用于学习目的的论坛很好,但请记住,已经有许多成熟且经过良好测试的 PHP 论坛包!

标签: mysql sql algorithm tsql


【解决方案1】:

我猜,您使用的是 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' 和 'user dislikes' 实际采用什么,以及为什么用逗号分隔的用户名?所以条件不变。

【讨论】:

  • 用户使用的是 MySQL,而不是 SQL Server。
  • 谢谢,但是如何访问这个值,我的意思是这个没有指定字段名。
【解决方案2】:

我已经陷入了使用逗号分隔值的陷阱。这是一个很好的答案:Is storing a delimited list in a database colum really that bad?

您必须使用 LIKE '%user_name%',从效率的角度来看,这并不好。尝试研究数据库规范化。

(我在 Stackoverflow 上的第一篇文章 :))

【讨论】:

  • 感谢您的建议。事实上,我忽略了这个事实。但是,当我阅读您给定的文章和其中的参考资料时,它对我帮助很大。感谢这个宝贵的建议。我不想牺牲效率。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 2014-08-21
相关资源
最近更新 更多