表格
+-----------------+------------+--------------+
| submit_time | field_name | field_value |
+-----------------+------------+--------------+
| 1410098760.2225 | cap | 40128 |
| 1410098760.2225 | provincia | Bologna |
| 1410098760.2225 | localita | Bologna |
| 1410098760.2225 | indirizzo | Via roma |
| 1410098760.2225 | zodiaco | Pesci |
| 1410098760.2225 | anno | 1964 |
| 1410098760.2225 | mese | 03 |
| 1410098760.2225 | giorno | 10 |
| 1410098760.2225 | card | 12 |
+-----------------+------------+--------------+
这是我的查询,
SELECT
submit_time,
Max(if(field_name = 'nome', field_value, NULL)) AS nome,
Max(if(field_name = 'giorno', field_value, NULL)) AS giorno,
Max(if(field_name = 'mese', field_value, NULL)) AS mese,
Max(if(field_name = 'anno', field_value, NULL)) AS anno,
Max(if(field_name = 'card', field_value, NULL)) AS card,
Max(if(field_name = 'localita', field_value, NULL)) AS localita,
Max(if(field_name = 'indirizzo', field_value, NULL)) AS indirizzo,
Max(if(field_name = 'email', field_value, NULL)) AS email,
Max(if(field_name = 'tel', field_value, NULL)) AS tel,
Max(if(field_name = 'cellulare', field_value, NULL)) AS cellulare
FROM zhter9mu3cf7dbplugin_submits
GROUP BY submit_time
这很完美,但如果我使用where子句
where field_name = 'card' and field_value = 12
所有字段都是空的。有什么建议可以解决这个问题吗?
答案 0 :(得分:2)
问题在于,当您使用WHERE
子句过滤field_name = 'card' and field_value = 12
时,您会返回一行。
您基本上是使用其他field_names
删除行。您可以通过对样本数据执行以下操作来查看此内容:
select *
from submits
where field_name = 'card'
and field_value = 12
见SQL Fiddle with Demo。这仅返回您请求的field_name
和field_value
的行。其他列中没有其他内容可以返回null。
如果您想要返回与您正在过滤的submit_time
和field_name
相同的field_value
,那么您可以使用:
SELECT
submit_time,
Max(if(field_name = 'nome', field_value, NULL)) AS nome,
Max(if(field_name = 'giorno', field_value, NULL)) AS giorno,
Max(if(field_name = 'mese', field_value, NULL)) AS mese,
Max(if(field_name = 'anno', field_value, NULL)) AS anno,
Max(if(field_name = 'card', field_value, NULL)) AS card,
Max(if(field_name = 'localita', field_value, NULL)) AS localita,
Max(if(field_name = 'indirizzo', field_value, NULL)) AS indirizzo,
Max(if(field_name = 'email', field_value, NULL)) AS email,
Max(if(field_name = 'tel', field_value, NULL)) AS tel,
Max(if(field_name = 'cellulare', field_value, NULL)) AS cellulare
FROM submits s
WHERE EXISTS (SELECT 1
FROM submits f
WHERE f.field_name = 'card'
AND f.field_value = '12'
AND f.submit_time = s.submit_time)
GROUP BY submit_time;