Php 将数据从MySQL水平加载到表

Php 将数据从MySQL水平加载到表,php,html-table,Php,Html Table,我正在从MySQL数据库加载一些数据,结果如下: | Gray | S | | Gray | M | | Gray | L | | Red | S | | Red | M | | Red | L | SELECT t.color , MAX(IF(t.size='S' ,t.size,NULL)) AS size_s , MAX(IF(t.size='M' ,t.size,NULL)) AS size_m , MAX(IF(t.siz

我正在从MySQL数据库加载一些数据,结果如下:

| Gray |  S  |
| Gray |  M  |
| Gray |  L  |
| Red  |  S  |
| Red  |  M  |
| Red  |  L  |
SELECT t.color
     , MAX(IF(t.size='S' ,t.size,NULL)) AS size_s
     , MAX(IF(t.size='M' ,t.size,NULL)) AS size_m
     , MAX(IF(t.size='L' ,t.size,NULL)) AS size_l
     , MAX(IF(t.size='XL',t.size,NULL)) AS size_xl
  FROM mytable t
 WHERE ...
 GROUP BY t.color
我想像这样水平地将数据加载到表中,按颜色分组:

| Gray |  S  |  M  |  L  |  XL  |
| Red  |  S  |  M  |  L  |  XL  |
这是我的密码:

<table>
<?php foreach($products as $product) {?>
    <tr>
    <td><?php echo $product['color'];?></td>
    <td><?php echo $product['size'];?></td>
    </tr>       
<?php   }
?>      
</table>


问题:如何将数据加载到每行按颜色分组的表中?没有单独的MySQL查询,我能做到这一点吗?

一点手动迭代将是你的朋友

$DatabaseResult = [ ['Gray','S'],['Gray','M'],['Gray','L'],['Red','S'],['Red','M'],['Red','L'] ];

$Grouped = array_fill_keys( array_unique( array_column( $DatabaseResult, 0 ) ), array() );

foreach( $DatabaseResult as $row )
{
  $Grouped[ $row[0] ][] = $row[1];
}

print_r( $Grouped );

//Array
//(
//    [Gray] => Array
//        (
//            [0] => S
//            [1] => M
//            [2] => L
//        )
//
//    [Red] => Array
//        (
//            [0] => S
//            [1] => M
//            [2] => L
//        )
//)
然后创建两个循环,外部是“颜色”行,内部是“大小”列



此外,如果您需要打印可用性的尺码表,您可以这样做

$Products = [
  ['color'=>'Gray','size'=>'S','quantity'=>2],
  ['color'=>'Gray','size'=>'M','quantity'=>4],
  ['color'=>'Gray','size'=>'L','quantity'=>7],
  ['color'=>'Red','size'=>'S','quantity'=>8],
  ['color'=>'Red','size'=>'M','quantity'=>6],
  ['color'=>'Red','size'=>'XXL','quantity'=>1],
];

// Helper function to locate products from the array
function SearchProductArray( $products, $color, $size )
{
  foreach( $products as $product )
  {
    if( $product[ 'color' ] == $color and $product[ 'size' ] == $size )
    {
      return $product;
    }
  }
  return false;
}

// Locate all the unique Values
$Colours = array_unique( array_column( $Products, 'color' ) );
$Sizes = ['SS','S','M','L','XL','XXL'];

?>

<table border="1">
  <tr>
    <td>Colour</td>
    <?php foreach( $Sizes as $Size ) {?>
      <td><?php echo $Size;?></td>
    <?php } ?>
  </tr>
  <?php foreach( $Colours as $Colour ) {?>
    <tr>
      <td><?php echo $Colour;?></td>
      <?php foreach( $Sizes as $Size ) { $Product = SearchProductArray( $Products, $Colour, $Size ); ?>
        <td><?php echo ( $Product ) ? $Product['quantity'] : '&nbsp'; ?></td>
      <?php } ?>
    </tr>
  <?php } ?>
</table>
$Products=[
['color'=>'Gray'、'size'=>'S'、'quantity'=>2],
['color'=>'Gray','size'=>'M','quantity'=>4],
['color'=>'Gray'、'size'=>'L'、'quantity'=>7],
['color'=>'Red'、'size'=>'S'、'quantity'=>8],
['color'=>'Red','size'=>'M','quantity'=>6],
[“颜色”=>“红色”、“尺寸”=>“XXL”、“数量”=>1],
];
//用于从阵列中定位产品的帮助器函数
函数SearchProductArray($products,$color,$size)
{
foreach($products as$product)
{
如果($product['color']==$color和$product['size']==$size)
{
退回$product;
}
}
返回false;
}
//找到所有唯一的值
$colors=array_unique(array_列($Products,'color'));
$Sizes=['SS','S','M','L','XL','XXL'];
?>
颜色

您可以尝试使用php。将结果转换为数组并使用for循环而不是foreach循环,您可以使用计数器将第一列作为行循环,然后将第二列作为行循环。

要从MySQL获得结果,我们可以执行以下操作:

| Gray |  S  |
| Gray |  M  |
| Gray |  L  |
| Red  |  S  |
| Red  |  M  |
| Red  |  L  |
SELECT t.color
     , MAX(IF(t.size='S' ,t.size,NULL)) AS size_s
     , MAX(IF(t.size='M' ,t.size,NULL)) AS size_m
     , MAX(IF(t.size='L' ,t.size,NULL)) AS size_l
     , MAX(IF(t.size='XL',t.size,NULL)) AS size_xl
  FROM mytable t
 WHERE ...
 GROUP BY t.color
请注意,查询只预期大小的特定值。如果MySQL表中有大小“XS”或“XXL”,则此查询将忽略这些值

因此,这种方法最适合具有静态、定义良好的域(有效值列表)的列

为了使这种方法更加动态,并返回如图所示的结果集,我们需要一个预查询来获取值列表,然后动态构造要执行的SQL语句


但是,一旦我们沿着这条路走下去,可能最好只通过一个简单的查询从MySQL中检索值,并在客户端进行处理,将行“透视”到列中进行表示。

老实说,这是一个表示问题,最好在PHP内部处理,而不是MySQL。我也这么认为,也许你对如何管理它有一些想法?很好,它可以处理你的数组数据,但是我怎样才能用$product['color']而不是'Gray'或'Red'加载它呢?只需将
$row[0]
更改为
$row['color']
等等,你能帮我多一点忙吗?如何在size value旁边添加$row['quantity'],其中显示'Yes'@JoeDoe我已经更新了答案的第二部分。我添加了一个助手函数
SearchProductArray
,以简化查找产品的过程。