Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL连接到连接创建一个好的数组_Php_Sql_Arrays_Join_Left Join - Fatal编程技术网

Php SQL连接到连接创建一个好的数组

Php SQL连接到连接创建一个好的数组,php,sql,arrays,join,left-join,Php,Sql,Arrays,Join,Left Join,嗨,我想做一个好的查询来获得一个好的数组。例如,现在我有一个查询: 从产品中选择不同的* 左外联接乘积_别名 在product_别名上。product_id=products.id 和product_alias.alias='$alias' 左外连接(产品图片) 左外连接产品\u图像\u投票 在product_image_.product_image_id=product_images.id上) 在product\u images.product\u id=products.id上 其中prod

嗨,我想做一个好的查询来获得一个好的数组。例如,现在我有一个查询:

从产品中选择不同的*
左外联接乘积_别名
在product_别名上。product_id=products.id
和product_alias.alias='$alias'
左外连接(产品图片)
左外连接产品\u图像\u投票
在product_image_.product_image_id=product_images.id上)
在product\u images.product\u id=products.id上
其中products.id=$id
结果是两个数组,如下所示:

array(
(int) 0 => array(
    'products' => array(
        'id' => '1',
        'user_id' => '1',

    ),
    'product_aliases' => array(
        'id' => '1',
        'product_id' => '1',
        'language' => 'it',
    ),
    'product_images' => array(
        'id' => '1',
        'product_id' => '1',
    ),
    'product_image_votes' => array(
        'id' => '2',
        'product_image_id' => '1',
        'vote' => '1',
    )
),
(int) 1 => array(
    'products' => array(
        'id' => '1',
        'user_id' => '1',

    ),
    'product_aliases' => array(
        'id' => '1',
        'product_id' => '1',
        'language' => 'it',
    ),
    'product_images' => array(
        'id' => '1',
        'product_id' => '1',
    ),
    'product_image_votes' => array(
        'id' => '2',
        'product_image_id' => '1',
        'vote' => '1',
    )
)
问题是:我只需要一个包含product的唯一数组,例如,数组中包含product\u images\u投票的product\u图像。 第一个问题是:

  • 具有唯一数组,而不是两个数组
  • 在我的左连接日期基部的数组内创建数组
阵列示例:

array(
(int) 0 => array(
    'products' => array(
        'id' => '1',
        'user_id' => '1',

    ),
    'product_aliases' => array(
        'id' => '1',
        'product_id' => '1',
        'language' => 'it',
    ),
    'product_images' => array(
        'id' => '1',
        'product_id' => '1',
        array('product_image_votes' => array(
            'id' => '2',
            'product_image_id' => '1',
            'vote' => '1',
        ))
    )
有可能吗?
我使用的是php,您的查询很好,但需要在php中构建嵌套。您无法单独在SQL中生成嵌套结构,因此必须使用现有的扁平结构

这可以通过一些创造性的循环来实现。创建一个由
产品['id']
索引的输出数组。在每次迭代中,如果新条目不存在,则创建一个新条目。如果它确实存在,则将一个数组添加到其
product\u images
,该数组也由
product\u images['id']
索引

// To hold the final array
$output = array();
foreach ($original_array as $row) {

  // Storing these id values to make them easier to refer to...
  $id = $row['products']['id'];
  $pid = $row['product_images']['id'];
  $paid = $row['product_aliases']['id'];
  $pivid = $row['product_image_votes']['id'];

  // Create the product entry if it does not exist
  // and initialize arrays for product_images and product_aliases    
  if (!isset($output[$id])) {
    $output[$id] = array(
      'products' => $row['products'],
      // Initialize these to sub-arrays containing the first ones from this row
      // using the id as the array key
      'product_aliases' => array($paid => $row['product_aliases']),
      'product_images' => array($pid => $row['product_images'])
    );
    // Then add the first vote
    $output[$id]['product_images'][$pid]['product_image_votes'] = array();
    $output[$id]['product_images'][$pid]['product_image_votes'][$pivid] = $row['product_image_votes'];
  }
  // If it does exist already, append the alias if that does not exist, the image, the vote etc.
  else {
    // First add the alias if not already set
    if (!isset($output[$id]['product_aliases'][$paid])) {
      $output[$id]['product_aliases'][$paid] = $row['product_aliases'];
    }
    // Then add the image if not already set
    if (!isset($output[$id]['product_images'][$pid])) {
      $output[$id]['product_images'][$pid] = $row['product_images'];
    }
    // And nest in the image_votes
    if (!isset($output[$id]['product_images'][$pid]['product_image_votes'][$pivid])) {
      $output[$id]['product_images'][$pid]['product_image_votes'][$pivid] = $row['product_image_votes'];
    }
  }
}

这里有很多,我可能有语法错误或缺少
]
。祝你好运。

语法错误没有问题,想想我的查询中有很多联接,我已经计算了要联接到查询中的表:40个要解析的表。。天啊。。我认为有一种方法或东西可以帮助我,而不是解析所有的results@AlessandroMinoccheri这就是ORM或CakePHP之类的框架有用的地方。表关系是在对象模型中定义的,然后检索一个产品,例如,只调用方法来获取其关联的图像等。没有框架,您必须手动执行大量工作。此查询是在cakephp中完成的,但我有太多包含和5000个查询。在这个问题之后,我决定写这个查询manually@AlessandroMinoccheri那就是取舍。框架生成了很多查询,速度很慢,或者您构建了一个快速查询,并且必须自己解析结果。这是一个艰难的选择,但我认为手动构建查询更有效。但是有40个表要加入,我会花很多时间来解析它。但如果这是我唯一的办法