SQL 查询以检索大于 1 的行值和对应的列名

SQL Query to retrieve Row Values greater than 1 and Corresponding Column Names

我有这个 MYSQL (phpmydamin) 数据库 table,它看起来像这样,我正在尝试检索有关特定行和列的大于 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 以从此 table 获取数据,我期待这样的反馈:

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

诸如此类,非常感谢您的帮助。提前致谢。

您需要做的是对数据进行逆透视。不幸的是,您的数据存储在 MySQL 中,它没有这样的功能。

这可以使用交叉联接来完成,但效率不是特别高。如果您没有大量数据,这可能不是问题,但如果您有大量数据,您可能需要考虑对数据进行 ETL 处理或更改存储设计。

Bluefeet has a good 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