用于检索大于1的行值和相应列名称的SQL查询

时间:2017-10-27 17:53:19

标签: mysql database rows columnname

我有这个MYSQL(phpmydamin)数据库表,看起来像这样,我正在尝试检索特定行的大于1的值的信息以及与这些设置值对应的列名。我基本上试图找出学生拿着什么项目以及有多少。

username      item1 item2 item3 item4 item5 item6 item7

n000111         1      0     1     1    1     1     1

n010554         0      0     3     2    0     0     0

n010555         1      0     4     0    0     1     1

n010556         0      0     0     0    0     0     0

n010557         0      8     0     2    0     1     0

例如,如果我将用户名“n010555”发送到我的phpscript以从此表中获取数据,我期待反馈如下:

n010555
item1 - 1
item3 - 4
item6 - 1
item7 - 1
total - 7

这样的事情,我真的很感激帮助。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您需要做的是取消您的数据。不幸的是,您的数据存储在MySQL中,而MySQL并没有这样的功能。

这可以使用交叉连接来完成,但它不是特别有效。如果您没有大量数据,这可能不是问题,但如果您拥有大量数据,则可能需要考虑ETL数据或更改存储设计。

Bluefeet对如何实现这一目标有一个很好的answer。适合您的解决方案看起来像:

select t.id,
  c.col,
  case c.col
    when 'item1' then item1
    when 'item2' then item2
    when 'item3' then item3
    when 'item4' then item4
    when 'item5' then item5
    when 'item6' then item6
    when 'item7' then item7
  end as data
from yourtable t
cross join
(
  select 'item1' as col
  union all select 'item2'
  union all select 'item3'
  union all select 'item4'
  union all select 'item5'
  union all select 'item6'
  union all select 'item7'
) c
where
  username = :username