从行到列

时间:2014-01-30 03:15:40

标签: php sql

生成输出没问题, 但是,我不知道从行到列生成。

我放在这里的简单代码和输出。

感谢。

$con = mysql_connect('localhost', 'root', 'xxx') 
if (!$con)   {  die('Could not connect: ' . mysql_error())   }   
mysql_select_db("kasy", $con) 
$sql="SELECT * from exam where intake='$b'"


echo "<table border='1'>
<th>name</th>
<th>subject</th>
<th>grade</th>
</tr>";

 $row= mysql_query($sql)
    {
     echo "<td>" . $row['name'] . "</td>";
     echo "<td>" . $row['subject'] . "</td>";
     echo "<td>" . $row['grade'] . "</td>";
    }

输出:

Name  | Subject  | Grade
Jose  | History  | A
Jose  | Language | A
Jose  | Account  | B
Brian | History  | B
Sarah | Math     | C

但我想要这样的东西,我不知道,

|Name  | History | Language | Account | Math |
|Jose  |   A     |    A     |  B      | NULL |
|Brian |   B     |  NULL    |  NULL   | NULL |
|Sarah |  NULL   |  NULL    |  NULL   |  C   |

intake ='$ b'=来自表单,我发布数据。

我只是想知道如何数组并生成这样的。特别感谢。

2 个答案:

答案 0 :(得分:1)

您需要透视数据。您可以使用aggregatino执行此操作:

select name,
       max(case when subject = 'History' then grade end) as History,
       max(case when subject = 'Language' then grade end) as Language,
       max(case when subject = 'Account' then grade end) as Account,
       max(case when subject = 'Math' then grade end) as Math
from exam
group by name;

我不知道where intake='$b'的用途,因为您的数据中没有intake列。此外,不推荐使用mysql_接口,因此您应该使用更现代的东西 - 并使用参数来防止SQL注入攻击。

答案 1 :(得分:0)

你应该使用mysqli甚至更好的PDO,因为mysql已被弃用,但试试这个

$con = mysql_connect('localhost', 'root', 'xxx') 
if (!$con)   {  die('Could not connect: ' . mysql_error())   }   
mysql_select_db("kasy", $con) 

    echo"<table border='1'>
        <tr>
            <td>Name</td>
            <td>History</td>
            <td>Language</td>
            <td>Account</td>
            <td>Math</td>
        </tr>";

    $result = mysql_query(SELECT * from exam where intake='$b'");

    while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
        {

            echo"

        <tr>
            <td>".$row['Name']."</td>
            <td>".$row['History']."</td>
            <td>".$row['Language']."</td>
            <td>".$row['Account']."</td>
            <td>".$row['Math']."</td>
        </tr>


            ";

        }