2013-01-05 47 views
0

我有一个数据表的格式如下MySQL查询显示,从两行数据作为单个列

region gender age_group population 

Dallas M  1   200 
Dallas F  1   500 
NY  M  1   320 
NY  F  1   310 
Dallas M  2   300 
Dallas F  2   600 
NY  M  2   400 
NY  F  2   800 

,我在下面的格式寻找最佳的查询输出我的数据

region/age_group  1   2 
Gender    M  F  M F 
Dallas    200 500 300 600 
NY     320 310 400 800 

我的查询只返回顶部柱和区域。不知道如何划分子顶科拉姆到性别的上面出现

SELECT distinct (region), a.group_one, b.group_two 
FROM city_populations c 
LEFT JOIN city_populations AS a ON a.age_group=1 AND c.age_group=a.age_group 
LEFT JOIN city_populations AS b ON b.age_group=2 AND c.age_group=a.age_group 
+0

我想你不知道如何格式化一个问题在这里。更好地检查提示,以在此格式化问题。 –

+0

谢谢,我只是做 – Rico

+0

我很抱歉我的朋友,如果我的话似乎是苛刻的你,但相信我只是想通知你,这里真的很好的东西,可以帮助你格式化问题和答案。请不要介意,因为我唯一的意图是通知你。 –

回答

1

//首先我拿来从数据库中的所有数据

$result = mysql_query("select * from test2")or die(mysql_error()); 
$regions = array(); 
$age_groups = array(); 
while($det = mysql_fetch_array($result)){ 

    if(!in_array($det['region'], $regions)){ 
     $regions[] = $det['region']; 
    } 
    if(!in_array($det['age_group'], $age_groups)){ 
     $age_groups[] = $det['age_group']; 
    } 
    $rows[] = $det; 
} 

//然后在PHP处理,使其呈现你想要的

echo "<table>"; 
echo "<tr><td>Age group</td>"; 
foreach($age_groups as $keyAG => $valueAG){ 
    echo "<td colspan='2'>$valueAG</td>"; 
} 
echo "</tr>"; 
echo "<tr><td>Gender</td>"; 
foreach($age_groups as $keyAG => $valueAG){ 
    echo "<td>M</td>"; 
    echo "<td>F</td>"; 
} 
echo "</tr>"; 
foreach($regions as $keyR => $valueR){ 

    echo "<tr>"; 
    echo "<td>".$valueR."</td>"; 
    foreach($age_groups as $keyAG => $valueAG){ 

     foreach($rows as $keyROWS => $valueROWS){ 
      if($valueROWS['region'] == $valueR && $valueROWS['age_group'] == $valueAG){ 
       if($valueROWS['gender'] == 'M'){ 
        echo "<td>".$valueROWS['population']."</td>"; 
       } 
       elseif($valueROWS['gender'] == 'F'){ 
        echo "<td>".$valueROWS['population']."</td>"; 
       } 
      } 
     } 
     $data[$valueR][$valueAG] = array($maleValue, $femaleValue); 

    } 
    echo "</tr>"; 
} 
echo "</table>"; 

注意:强烈建议使用mysqli_ *而不是mysql。

+0

@bhavick谢谢。作为魅力发挥作用!即时修改它在没有人口的行中显示0。我已经为此工作了一个多星期!非常感谢 – Rico