从表中获取,切换行和列并按另一列值过滤

时间:2014-11-24 22:41:51

标签: mysql sql

据推测,这个问题已经在其他地方得到了回答,但我还没有成功完成我到目前为止所做的事情(这里有reeeaal初学者)。

我想要做的是从名为" wp_iphorm_form_entry_data"的表中检索数据。看起来像这样:

%/ element_id / value      /%
-----------------------------
%/ 4          / first name /%
%/ 5          / last name  /%
%/ 42         / e-mail     /%

然后切换行和列并重命名它们,如下所示:

%/ 4 (f-name)  / 5 (l-name) / 42 (e-mail) /%
--------------------------------------------
  first name  / last name  / e-mail      /%

最后用另一个" element_id"过滤条目。 提前谢谢你,任何人?

2 个答案:

答案 0 :(得分:0)

这是在枢轴功能存在之前完成的方式

SELECT userGroupingID
       MAX(case when element_Id=4 then value else null end) as `First Name`,
       MAX(case when element_Id=5 then value else null end) as `Last Name`,       
       MAX(case when element_Id=42 then value else null end) as `e-mail`
FROM  wp_iphorm_form_entry_data
GROUP BY userGroupingID 

UserGroupingID是一些值,表示分组元素,如元素集的userID或groupID。没有这个,我看不出你如何能够完成你要求的超过1行数据。当然,使用mysql对group by语句的扩展...如果你不关心为每个元素ID返回哪些值,你不需要选择中的userGroupingID,或者根本不需要一个组..

Pivot可以更简单:示例MySQL pivot table

但你会遇到同样的问题。什么表示元素的分组方式?

答案 1 :(得分:0)

你需要做的就是,只需运行你需要的所有结果并将它们初始化为数组,然后按照你想要的方式打印它们

$el_id=[]; $val=[];   //create an array to store your results from db
$link = mysqli_connect("myhost","myuser","mypassw","mybd") or die("Error".mysqli_error($link)); //conection
$sql="select element_id,value  from wp_iphorm_form_entry_data";
$result = $link->query($sql); //execute the query.

while($row = mysqli_fetch_array($result)) {  //store your results into arrays 
$el_id = $row["element_id"]; 
 $val  = $row["value"];
} 

print "<table><tr><th>$el_id[0] (f-name)</th><th>$el_id[1] (l-name)</th><th>$el_id[2] (e-mail)</th></tr>";
//foreach($el_id as $index=>$elementId){ // i comment this since your example is not clear to me
 echo '<tr><td>$val[0]</td><td>$val[1]</td><td>$val[]</td>';
//}