【问题标题】:How to use multiple UNION in same table如何在同一个表中使用多个UNION
【发布时间】:2017-07-03 07:51:09
【问题描述】:

我在从 HTML TABLE 形式的结果表中获取数据时遇到问题。我有一个表结果,其中包含有关学生成绩的信息,其中标记列具有多个值,例如 SA1、SA2、SA3、Mid_term、Final
所以在这个查询中,我从results table 获取first_namemarks
问题是我在SA1 column 下获得了所有分数,但我希望在SA1 Column SA2 marksSA2 Column SA3 marksSA3 Column 下获得SA1 marks
我几乎尝试了所有方法,但我无法弄清楚我在做什么。

这是我的代码

echo '<table class = "w3-table">
<tr> 
<td> Name </td>
<td> SA1 </td>
<td> SA2 </td>
<td> SA3 </td>
<td> Mid-term </td>
<td> Final </td>
</tr>
<tr>
';
$q = "(SELECT first_name, marks  FROM results WHERE class = '11th Arts' AND 
subject = 'Arts' AND exam_type = 'SA1' )
     UNION ALL (SELECT  NULL, marks as m1  
FROM results WHERE class = '11th Arts' AND subject = 'Arts' 
AND exam_type = 'SA2' ) 
     UNION ALL (SELECT  NULL, marks as m2  FROM results
 WHERE class = '11th Arts' AND subject = 'Arts' AND exam_type = 'SA3' )
     UNION ALL (SELECT  NULL, marks as m3  FROM results 
WHERE class = '11th Arts' AND subject = 'Arts' AND exam_type = 'Mid-term')
     UNION ALL (SELECT  NULL, marks as m4  FROM results 
WHERE class = '11th Arts' AND subject = 'Arts' AND exam_type = 'Final')";

$r = mysqli_query($dbc, $q)
or die(mysqli_error($dbc));
while($row = mysqli_fetch_assoc($r))
{
    $name = $row['first_name'];
    $marks = $row['marks'];
    $marks1 = $row['m1'];
    $marks2 = $row['m2'];
    $marks3 = $row['m3'];
    $marks4 = $row['m4'];
    echo '<tr>
         <td>' .$name .'</td>
         <td>'. $marks. '</td>
         <td>'. $marks1. '</td>
         <td>'. $marks2. '</td>
         <td>'. $marks3. '</td>
         <td>'. $marks4. '</td>
         </tr>';
}
echo '</table>';
?> 

【问题讨论】:

  • 请给出你的表结构
  • 您正在尝试做的事情称为枢轴,而不是联合。看看例如MySQL pivot table
  • id、username、first_name、last_name、exam_type、subject、date、marks、total_marks、class 这些是列

标签: php mysql while-loop union


【解决方案1】:

您可以使用 mySql WHEN CASE 来获得您想要的输出。
试试这个

SELECT first_name,
case when exam_type = 'SA1' then marks end as m1,  
case when exam_type = 'SA2' then marks end as m2,
case when exam_type = 'SA3' then marks end as m3, 
case when exam_type = 'Mid-term' then marks end as m4,  
case when exam_type = 'Final' then marks end as m5 
FROM results
WHERE class = '11th Arts' AND 
subject = 'Arts'

你会被淘汰

$name = $row['first_name'];
$marks = $row['m1'];
$marks1 = $row['m2'];
$marks2 = $row['m3'];
$marks3 = $row['m4'];
$marks4 = $row['m5'];

我想它会对你有所帮助。

【讨论】:

  • 您好,我之前也尝试过这个,问题是这里的名字会不断重复,并且标记列将不在正确的位置。
  • 根据您的数据库结构,您将用户数据存储在多行中,这就是您将在此结构中获取数据的原因,但您可以根据所需的格式管理数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 2017-07-10
  • 1970-01-01
相关资源
最近更新 更多