我现在正在思考这个问题并且没有掌握(因为我是MVC和CI的新手)。我甚至不确定这是否是MVC,MySQL或数组的问题。
情况:2个MySQL表格
查询数据表会产生如下数组(摘录):
[4] => Array
(
[id] => 3
[title] => Foo
[list] => 1,2,3,4,6,14
)
[5] => Array
(
[id] => 4
[title] => Bar
[list] => 2,6,9,12
)
字段列表包含逗号分隔值,这些值对应于值表的某些ID,如
[3] => Array
(
[id] => 12
[name] => 'value12'
)
我尝试为每一行做的是:
以某种方式将其包含在主结果集中(例如,作为二维数组):
[5] =>阵列( [id] => 4 [title] =>酒吧 [list] =>阵列( [0] => value6 [1] => value12 ... ) )
到目前为止,我天真的做法是
我的主要问题(尝试严格分离模型,控制器和视图时):如何在 data 表结果集的“主循环”中包含values-table中的name字段?
if($q->num_rows() > 0)
{
$data[] = $q->result_array();
foreach ($q->result() as $row)
{
$data[] = $row;
}
return $data;
}
如果我使用以下(繁琐)方法,我每次都会自然得到一个新项目:
foreach ($q->result_array() as $row)
{
$data[]['id'] = $row['id'];
$data[]['title'] = $row['title'];
$data[]['list'] = $row['year'];
}
由于这是一个MySQL数据库,我认为无法在SQL中进行爆炸和比较(使用LIKE或其他方式)。
任何提示,即使是指向信息位的简单链接,都非常感谢。
万分感谢!
FAB
答案 0 :(得分:1)
列表和列表值之间存在多对多关系。在关系数据库中对此进行建模的传统方法是创建连接表。所以我会像这样构建你的架构。
lists : list_id, title
values : value_id, name
list_values : list_id, value_id
list_values
是加入表。它将列表与值链接起来。
要构建列表,您可以在模型中使用以下功能
function build_list($list_id)
{
$list = $this->get_list($list_id);
$list->values = $this->get_list_values($list_id);
return $list;
}
function get_list($list_id)
{
$sql = 'select * from lists where list_id=?';
return $this->db->query($sql, array($list_id))->row();
}
function get_list_values($list_id)
{
$sql = 'select v.value_id, v.name
from list_values lv
join values v on v.value_id=lv.value_id
where lv.list_id=?';
return $this->db->query($sql, array($list_id))->result();
}