【问题标题】:PHP Array Multiple fields looping Array from MysqlPHP Array 多个字段从 Mysql 循环数组
【发布时间】:2014-07-28 17:50:29
【问题描述】:

我想在下面的代码中为我的输出添加更多列。我已经尝试了 7 个多小时,但仍然无法弄清楚如何。

$sub=array();
$query=mysql_query("SELECT regd, name, roll, Subject, 
  SUM( Mark_score ) / SUM( Full_Mark ) *100 AS hl, 
  SUM( Full_Mark ) AS hm
  FROM entry
  WHERE Year = '2013'
  AND Section = 'A'
  AND Name_of_exam = 'First Term Exam'
  GROUP BY regd, Subject");
while ($row=mysql_fetch_assoc($query)){ 
  $sub[$row['regd']][$row['Subject']] = $row['hl']; 
}
$subkey=key($sub); //get the 1st regd key, to be used to get the Subject keys

echo "<table border=1>";
echo "<tr>";
echo '<td>regd</td>';
echo '<td>name</td>';
foreach($sub[$subkey] as $keys=>$vals){
  echo "<td>".$keys."</td>";
}
echo "</tr>";
foreach($sub as $key=>$val){ //loop through each regd value, creating a row
  echo "<tr>";
  echo '<td>'.$key.'</td>';
  echo '<td>'.$name.'</td>';//How do I put name array here?
  foreach($val as $v){ //loop through each Subjects for each regd
    echo '<td>'.$v.'</td>';
  }
  echo "</tr>";
}
echo "</table>";

我想在输出中添加name 字段和roll 字段。感谢您的意见。

更新了表格:

CREATE TABLE IF NOT EXISTS `entry` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `regd` bigint(20) NOT NULL,
  `name` varchar(30) NOT NULL,
  `rollno` int(11) NOT NULL,
  `section` varchar(5) NOT NULL,
  `univ_roll` varchar(50) NOT NULL,
  `year` year(4) NOT NULL,
  `subject` varchar(50) NOT NULL,
  `Name_of_exam` varchar(40) NOT NULL,
  `Mark_score` int(11) NOT NULL,
  `Full_Mark` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `regd` (`regd`),
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;

【问题讨论】:

  • mysql_query 是一个过时的接口,不应在新应用程序中使用,并将在未来的 PHP 版本中删除。像PDO is not hard to learn 这样的现代替代品。如果您是 PHP 新手,PHP The Right Way 之类的指南可以帮助您解释最佳实践。
  • 感谢您的意见。一定会检查的。

标签: php mysql arrays loops pivot


【解决方案1】:

这看起来像是现有代码的插件,因此以下内容应该可以正常工作而不会破坏它

$sub = array();
$query = mysql_query("SELECT regd, name, rollno as roll, Subject,
SUM( Mark_score ) / SUM( Full_Mark ) *100 AS hl,
SUM( Full_Mark ) AS hm
FROM entry
WHERE Year = '2013'
AND Section = 'A'
AND Name_of_exam = 'First Term Exam'
GROUP BY regd, Subject");
$array = array(); //create new array
while ($row = mysql_fetch_assoc($query)) {
    $sub[$row['regd']][$row['Subject']] = $row['hl'];

//by doing this, you preserve existing code
    $array[$row['regd']]['roll'] = $row['roll'];
    $array[$row['regd']]['name'] = $row['name'];
}
$subkey = key($sub); //get the 1st regd key, to be used to get the Subject keys

echo "<table border=1>";
echo "<tr>";
echo '<td>regd</td>';
echo '<td>name</td>';
echo '<td>roll</td>';
foreach ($sub[$subkey] as $keys => $vals) {
    echo "<td>".$keys."</td>";
}
echo "</tr>";
foreach ($sub as $key => $val) { //loop through each regd value, creating a row
    echo "<tr>";
    echo '<td>'.$key.'</td>';
    echo '<td>'.$array[$key]['name'].'</td>';
    echo '<td>'.$array[$key]['roll'].'</td>';
    foreach ($val as $v) { //loop through each Subjects for each regd
        echo '<td>'.$v.'</td>';
    }
    echo "</tr>";
}
echo "</table>";

【讨论】:

  • 它确实输出任何东西。我什么都没改变。
  • 好吧,如果没有结果,那么问题出在你的mysql查询中,这至少会添加一列......
  • 感谢您的输入,只有姓名和滚动字段为空白。我将重新检查我的代码。无论如何,这个 sql 查询有什么问题吗?
  • 如果没有错误消息,可能是没有行匹配 WHERE 子句中的条件。在 $subkey = key($sub) 之后,执行 var_dump($sub),如果有结果,它会给你一个数组。如果数组为空,则没有结果。然后逐个删除条件(从 group by 开始),直到有结果。这样你就知道它在哪里坏了。
  • var_dump();输出一切。但在表格中,name 和 roll 变为空白。
猜你喜欢
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 2018-08-01
  • 2015-01-19
  • 2016-07-06
  • 1970-01-01
  • 2018-01-21
  • 2013-04-28
相关资源
最近更新 更多