Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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 获取联接中的多行(codeigniter)_Php_Mysql_Codeigniter_Join - Fatal编程技术网

Php 获取联接中的多行(codeigniter)

Php 获取联接中的多行(codeigniter),php,mysql,codeigniter,join,Php,Mysql,Codeigniter,Join,我很难从下面的代码中获得预期的结果 第一步是: 从一个表中获取一行或从另一个表中连接多行。。。rsult数组应如下所示: array( field_1, field_2, field_3, joined_array( field_a_array( field_a_a, field_a_b, field_a_c ), field_b_array( field_b_a, field_b_

我很难从下面的代码中获得预期的结果

第一步是:

从一个表中获取一行或从另一个表中连接多行。。。rsult数组应如下所示:

array(
  field_1, 
  field_2, 
  field_3, 
  joined_array(
    field_a_array(
      field_a_a, 
      field_a_b, 
      field_a_c
    ), 
    field_b_array(
      field_b_a, 
      field_b_b, 
      field_b_c
    )
  ) 
) 
SELECT `events`.*, group_concat(`genres_x_events`.`genre_slug`)
FROM (`events`)
LEFT OUTER JOIN `genres_x_events` ON `genres_x_events`.`event_slug` = `events`.`slug`
WHERE `events`.`slug` =  'test'
AND `events`.`deleted` =  0
GROUP BY events.id
我的查询如下所示:

array(
  field_1, 
  field_2, 
  field_3, 
  joined_array(
    field_a_array(
      field_a_a, 
      field_a_b, 
      field_a_c
    ), 
    field_b_array(
      field_b_a, 
      field_b_b, 
      field_b_c
    )
  ) 
) 
SELECT `events`.*, group_concat(`genres_x_events`.`genre_slug`)
FROM (`events`)
LEFT OUTER JOIN `genres_x_events` ON `genres_x_events`.`event_slug` = `events`.`slug`
WHERE `events`.`slug` =  'test'
AND `events`.`deleted` =  0
GROUP BY events.id
(似乎何处、连接等位置对于codigniters db类并不重要)

我面临的问题是,当我期望每次连接检索多行时,我只从连接中获取一行

编辑:

最后一个查询():

输出:

Array(
    [0] => Array
        (
            [id] => 25
            [headline] => test
            [subheadline] => 
            [slug] => test
            [date] => 2012-08-10
            [start_time] => 00:00:00
            [end_time] => 00:00:00
            [price] => 
            [body] => 
            [location_id] => 5
            [genre_id] => 0
            [creation_date] => 2012-08-10 14:26:33
            [update_date] => 2012-08-10 14:26:41
            [deleted] => 0
            [genre_slug] => rock
        )

    [1] => Array
        (
            [id] => 25
            [headline] => test
            [subheadline] => 
            [slug] => test
            [date] => 2012-08-10
            [start_time] => 00:00:00
            [end_time] => 00:00:00
            [price] => 
            [body] => 
            [location_id] => 5
            [genre_id] => 0
            [creation_date] => 2012-08-10 14:26:33
            [update_date] => 2012-08-10 14:26:41
            [deleted] => 0
            [genre_slug] => metal
        )

    [2] => Array
        (
            [id] => 25
            [headline] => test
            [subheadline] => 
            [slug] => test
            [date] => 2012-08-10
            [start_time] => 00:00:00
            [end_time] => 00:00:00
            [price] => 
            [body] => 
            [location_id] => 5
            [genre_id] => 0
            [creation_date] => 2012-08-10 14:26:33
            [update_date] => 2012-08-10 14:26:41
            [deleted] => 0
            [genre_slug] => indie
        )

)
想要输出(类似的东西会很酷):


尝试按event.id对其进行分组,然后使用group_concat,如下所示:

array(
  field_1, 
  field_2, 
  field_3, 
  joined_array(
    field_a_array(
      field_a_a, 
      field_a_b, 
      field_a_c
    ), 
    field_b_array(
      field_b_a, 
      field_b_b, 
      field_b_c
    )
  ) 
) 
SELECT `events`.*, group_concat(`genres_x_events`.`genre_slug`)
FROM (`events`)
LEFT OUTER JOIN `genres_x_events` ON `genres_x_events`.`event_slug` = `events`.`slug`
WHERE `events`.`slug` =  'test'
AND `events`.`deleted` =  0
GROUP BY events.id
这将为您提供给定event.id的所有类型的逗号分隔列表。您可以使用类似这样的方法更改分隔符(类似于管道)

SELECT `events`.*, group_concat(`genres_x_events`.`genre_slug` SEPARATOR '|')
FROM (`events`)
LEFT OUTER JOIN `genres_x_events` ON `genres_x_events`.`event_slug` = `events`.`slug`
WHERE `events`.`slug` =  'test'
AND `events`.`deleted` =  0
GROUP BY events.id

您是否尝试过运行针对db服务器构建的sql语句?基于您的CI代码,我假设它类似于
select*from events e join genres_x_events g on e.slug=g.event_slug,其中e.deleted=0,e.slug='SOMEVALUEHERE'
this->db->last_query()的输出会有帮助的。是的。请发布您的实际输出,然后告诉我们您期望的输出是什么。我已经用最后一个查询、输出和我想要的输出更新了初始输出;)所以您得到了正确的数据,但它不是您想要的PHP结构。我有一种感觉,最好的方法是迭代您的结果集,并将其应用到您希望的结构中。