MySQL技术问询:如何查询投票表中指定投票者的对应列名
解决投票选项查询的SQL方案
嘿,我来帮你搞定这个查询需求!首先得纠正个小笔误:你提到的数据库表是votes,但SQL里写成了poll,下面的方案我会用正确的表名来写。
方案一:使用CASE语句(适合固定少量选项)
这种方法直观简单,完美适配你当前只有A、B、C三个选项的场景:
SELECT CASE WHEN value_A = 1 THEN 'value_A' WHEN value_B = 1 THEN 'value_B' WHEN value_C = 1 THEN 'value_C' ELSE NULL -- 处理未选中任何选项的异常情况 END AS entry_selected FROM votes WHERE id_voter = '11'
逻辑非常清晰:逐个检查每个投票选项列的值,找到值为1的列时直接返回对应的列名,完全匹配你的预期输出。
方案二:行转列查询(适合可扩展的场景)
如果以后投票选项可能新增,这种方法扩展性更强,不需要修改核心逻辑,只需要新增分支即可:
SELECT entry_selected FROM ( SELECT id_voter, 'value_A' AS entry_selected, value_A AS vote_value FROM votes UNION ALL SELECT id_voter, 'value_B' AS entry_selected, value_B AS vote_value FROM votes UNION ALL SELECT id_voter, 'value_C' AS entry_selected, value_C AS vote_value FROM votes ) AS unpivoted_votes WHERE id_voter = '11' AND vote_value = 1
这个思路是先把每一列的投票数据转换成一行,再筛选出值为1的那条记录,就能得到对应的列名。如果以后新增value_D,只需要在子查询里加一条UNION ALL SELECT id_voter, 'value_D', value_D FROM votes就行,非常灵活。
小提醒
要确保业务逻辑里每个投票者只会有一个选项被设为1(单选场景),这样两种方法都会返回唯一结果。如果存在多选情况,方案二会返回所有选中的选项列名,方案一则只会返回第一个匹配到的列名,可以根据实际需求选择。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

