【问题标题】:How to fetch data from mysql as array of arrays如何从mysql中获取数据作为数组数组
【发布时间】:2022-07-12 02:14:41
【问题描述】:

我有这个 sql 查询:

SELECT * 
FROM productoptions  
    INNER JOIN options on productoptions.OptionID = options.OptionID 
    INNER JOIN optiongroups ON productoptions.OptionGroupID = optiongroups.OptionGroupID;

有没有办法将它作为多维数组获取?在某种程度上,每个选项组名称都是一个包含其所有选项名称的数组?

我将从 PHP 脚本中获取它

【问题讨论】:

  • 不,仅在 SQL 中无法做到这一点
  • 但是您可以使用 PHP 代码制作该数组
  • 如果您向我们展示了您认为需要的数组示例,这将有所帮助
  • 这能回答你的问题吗? stackoverflow.com/questions/1501274/…
  • 非常感谢大家的支持。我有一种感觉,它无法像这样被获取。但是你能帮我用php吗?这就是我想要的:如果您在图片中看到 OptionGroupName 有两个唯一值,我希望有两个具有此值的索引数组,然后它们的值是一个包含属于它们的选项名称的数组

标签: php mysql sql arrays


【解决方案1】:

使用GROUP_CONCAT() 在 MySQL 中创建串联字符串。

SELECT 
    GROUP_CONCAT(DISTINCT CASE WHEN OptionGroupName = 'color' THEN OptionName END) AS color,
    GROUP_CONCAT(DISTINCT CASE WHEN OptionGroupName = 'size' THEN OptionName END) AS size
FROM productoptions  
INNER JOIN options on productoptions.OptionID = options.OptionID 
INNER JOIN optiongroups ON productoptions.OptionGroupID = optiongroups.OptionGroupID;

然后在 PHP 中你可以将它分解成数组。

$row = $result->fetch_assoc();
$row['color'] = explode(',', $row['color']);
$row['size'] = explode(',', $row['size']);

【讨论】:

    【解决方案2】:

    你的回答很好,巴尔玛。非常感谢。问题是我可能有更多的 OptionGroupName 并且无法对它们进行硬编码,因为它们将是动态的。我用这个 php 代码实现了它

        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        $variantsToBeTreated = [];
        $variantsArray = [];
    
        foreach ($rows as $key => $one) {
    
            $data[] = $one['OptionGroupName'];
    
            foreach ($one as $key => $two) {
    
                foreach ($data as $three) {
    
                    if ($three == $two) {
                        $variantsToBeTreated[$two][] = $one['OptionName'];
                    }
                }
            }
        }
    
        foreach ($variantsToBeTreated as $key => $val) {
            $variantsArray[$key] = array_unique($val);
        }
    
        return $variantsArray; 
    

    这种方法的问题是它看起来很冗长。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-27
      • 2016-05-02
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      • 2021-06-05
      • 2016-02-01
      相关资源
      最近更新 更多