php - 根据值将表行划分到不同的列

标签 php mysql

我有一个 mysql 表 id、gra、grb 整数和 NOT NULL,并且包含 1 到 10 之间的不同数字。 我想根据其值将 gra 和 grb 中的数据划分到不同的列。

示例:mysql 表:

+------------+------------+------------+
| id         | gra        | grb        |
+------------+------------+------------+ 
| 1          | 2          | 6          |
+------------+------------+------------+ 
| 2          | 10         | 8          |
+------------+------------+------------+ 
| 3          | 9          | 5          |
+------------+------------+------------+ 

etc

预期的表输出将如下所示:

+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+
| gr1        | gr2        | gr3        | gr4        | gr5        |gr6         | gr7        |gr8         |gr9         |gr10        |
+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+
|            | 2          |            |            |            | 6          |            |            |            |            |
+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+
|            |            |            |            |            |            |            | 8          |            | 10         |
+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+
|            |            |            |            | 5          |            |            |            | 9          |            |
+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+

有没有简单的方法可以做到这一点?我想我可以使用 mysql 和 CASE 函数来做到这一点,但它太长了。我认为应该有一个更简单的方法。我可以得到这方面的帮助吗?谢谢。

最佳答案

使用这种方法可以获得想要的结果

// Create connection
$conn = new mysqli('hostname', 'username', 'password', 'dbname');
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
} 
$sql    = "SELECT gra ,grb FROM `tablename`";
$result = $conn->query($sql);
$rows   = array();
$i = 0;
if ($result->num_rows > 0) {

 while($row = $result->fetch_assoc()) {
    foreach(range(1,10) as $key => $value){
        $_key = 'gr'.$value;
        $rows[$i][$_key] = ($row['gra'] == $value) ? $row['gra'] : ( ($row['grb'] == $value) ? $row['grb'] : null);
    }
    $i++;
  }
}
echo '<pre>';
print_r($rows);

您可以在这样的表格中打印

$sql    = "SELECT gra ,grb FROM `grade`";
$result = $conn->query($sql);
$rows   = array();
$i = 0;
$html = '<table border="1"><tr>';
foreach(range(1,10) as $v){
  $html.= '<td>gr'.$v.'</td>';
}
$html .= '</tr>';
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
  $html .= '<tr>';
  foreach(range(1,10) as $key => $value){
    $_key = 'gr'.$value;
     $rows[$i][$_key] = ($row['gra'] == $value) ? $row['gra'] : ( ($row['grb'] == $value) ? $row['grb'] : null);
     $html .= '<td>&nbsp;'.$rows[$i][$_key].'&nbsp;</td>';
   }
   $html .= '</tr>';
   print_r($rows[$i]);echo '<hr>';
   $i++;
 }
}
$html .= '</table>';
echo $html;

关于php - 根据值将表行划分到不同的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55776326/

相关文章:

php - 多维数组的设置值

mysql - 为什么mysql慢日志会报告这些非慢查询

mysql select语句中的子查询

javascript - bxslider 自定义下一张幻灯片按钮

php - stub 由类的构造函数调用的方法

javascript - 使用 session 变量和javascript使 session 过期

php - 根据数据库字段创建 HTML 表单

php - 如何连接到http ://localhost/magento to complete Magento Community Edition ver1. 9.2.4 安装?

php - laravel:未定义密码重置器 []

python - scrapy 和 MySQL 的错误处理