Php 获取联接中的多行(codeigniter)
我很难从下面的代码中获得预期的结果 第一步是: 从一个表中获取一行或从另一个表中连接多行。。。rsult数组应如下所示: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_
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结构。我有一种感觉,最好的方法是迭代您的结果集,并将其应用到您希望的结构中。