我有这个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
这样的事情,我真的很感激帮助。提前谢谢。
答案 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