Php 如何从联接表结果中分离值?
我有一个简单的连接表,看起来像这样Php 如何从联接表结果中分离值?,php,mysql,codeigniter,Php,Mysql,Codeigniter,我有一个简单的连接表,看起来像这样 NO CLASS NAME STATUS 1 1A JOHN 1 2 1A SARA 1 3 1A LYOD 1 4 1B JOHN 1 5 1B SHIN 1 我使用文本框显示类,使用文本区显示名称。1A类的输出应如下所示: Class : 1A Name :
NO CLASS NAME STATUS
1 1A JOHN 1
2 1A SARA 1
3 1A LYOD 1
4 1B JOHN 1
5 1B SHIN 1
我使用文本框
显示类
,使用文本区
显示名称
。1A类的输出应如下所示:
Class : 1A
Name : JOHN, SARA, LYOD
如何仅使用联接表(而不是多个查询)执行此操作
这就是我循环结果的方式:
$query = $this->xxx->yyy($class_name); //JOINED RESULT
$data = array(
'titlepage' => APP_TITLEPAGE,
'record' => $query, //This is the result that is sent to the view
'complete' => 'true',
'loadmethod' => 'add',
'contentpage' => 'test_page/detail'
);
$this->load->view('shared/master_app', $data);
如果您想在一列中添加同一类中的所有名称,那么可以通过GROUP\u CONCAT()
mysql函数来实现
使用GROUP_CONCAT调整您的查询。有关示例,请参见下文
SELECT CLASS, GROUP_CONCAT(NAME)
FROM table_name
GROUP BY CLASS;
它将像这样输出
1A JOHN,SARA,LYOD
2A JOHN,SHIN
$query = $this->xxx->yyy($class_name); //JOINED RESULT
$data = array(
'titlepage' => APP_TITLEPAGE,
'record' => groupResults($query), //This is the result that is sent to the view
'complete' => 'true',
'loadmethod' => 'add',
'contentpage' => 'test_page/detail'
);
$this->load->view('shared/master_app', $data);
您还可以使用GROUP_COCAT separator在名称之间放置自定义分隔符
SELECT CLASS, GROUP_CONCAT(NAME SEPARATOR ' -- ')
FROM table_name
GROUP BY CLASS;
作为参考如果您想在一列中添加同一类中的所有名称,那么可以通过GROUP\u CONCAT()
mysql函数来实现
使用GROUP_CONCAT调整您的查询。有关示例,请参见下文
SELECT CLASS, GROUP_CONCAT(NAME)
FROM table_name
GROUP BY CLASS;
它将像这样输出
1A JOHN,SARA,LYOD
2A JOHN,SHIN
$query = $this->xxx->yyy($class_name); //JOINED RESULT
$data = array(
'titlepage' => APP_TITLEPAGE,
'record' => groupResults($query), //This is the result that is sent to the view
'complete' => 'true',
'loadmethod' => 'add',
'contentpage' => 'test_page/detail'
);
$this->load->view('shared/master_app', $data);
您还可以使用GROUP_COCAT separator在名称之间放置自定义分隔符
SELECT CLASS, GROUP_CONCAT(NAME SEPARATOR ' -- ')
FROM table_name
GROUP BY CLASS;
作为参考,您的查询数组如下所示:
$query = [
['NO' => 1, 'CLASS' => '1A', 'NAME' => 'JOHN', 'STATUS' => '1'],
['NO' => 2, 'CLASS' => '1A', 'NAME' => 'SARA', 'STATUS' => '1'],
['NO' => 3, 'CLASS' => '1A', 'NAME' => 'LYOD', 'STATUS' => '1'],
['NO' => 4, 'CLASS' => '1B', 'NAME' => 'JOHN', 'STATUS' => '1'],
];
$result = [
'1A' => ['JOHN', 'SARA', 'LYOD'],
'1B' => ['JOHN']
]
您可以创建一个函数来对其进行排列或分组
将其命名为groupResults($query)
现在的结果如下所示:
$query = [
['NO' => 1, 'CLASS' => '1A', 'NAME' => 'JOHN', 'STATUS' => '1'],
['NO' => 2, 'CLASS' => '1A', 'NAME' => 'SARA', 'STATUS' => '1'],
['NO' => 3, 'CLASS' => '1A', 'NAME' => 'LYOD', 'STATUS' => '1'],
['NO' => 4, 'CLASS' => '1B', 'NAME' => 'JOHN', 'STATUS' => '1'],
];
$result = [
'1A' => ['JOHN', 'SARA', 'LYOD'],
'1B' => ['JOHN']
]
这是我得到的快照:
所以现在你可以这样使用它
1A JOHN,SARA,LYOD
2A JOHN,SHIN
$query = $this->xxx->yyy($class_name); //JOINED RESULT
$data = array(
'titlepage' => APP_TITLEPAGE,
'record' => groupResults($query), //This is the result that is sent to the view
'complete' => 'true',
'loadmethod' => 'add',
'contentpage' => 'test_page/detail'
);
$this->load->view('shared/master_app', $data);
现在,在视图中,您可以在此阵列上循环,如下所示:
foreach($record as $class => $names) {
echo "<input type='text' value='" . $class . "'>";
echo "<textarea>" . implode(', ', $names) . "</textarea>";
}
foreach($class=>$name记录){
回声“;
echo“”。内爆(',',$names)。“”;
}
因此您的查询数组如下所示:
$query = [
['NO' => 1, 'CLASS' => '1A', 'NAME' => 'JOHN', 'STATUS' => '1'],
['NO' => 2, 'CLASS' => '1A', 'NAME' => 'SARA', 'STATUS' => '1'],
['NO' => 3, 'CLASS' => '1A', 'NAME' => 'LYOD', 'STATUS' => '1'],
['NO' => 4, 'CLASS' => '1B', 'NAME' => 'JOHN', 'STATUS' => '1'],
];
$result = [
'1A' => ['JOHN', 'SARA', 'LYOD'],
'1B' => ['JOHN']
]
您可以创建一个函数来对其进行排列或分组
将其命名为groupResults($query)
现在的结果如下所示:
$query = [
['NO' => 1, 'CLASS' => '1A', 'NAME' => 'JOHN', 'STATUS' => '1'],
['NO' => 2, 'CLASS' => '1A', 'NAME' => 'SARA', 'STATUS' => '1'],
['NO' => 3, 'CLASS' => '1A', 'NAME' => 'LYOD', 'STATUS' => '1'],
['NO' => 4, 'CLASS' => '1B', 'NAME' => 'JOHN', 'STATUS' => '1'],
];
$result = [
'1A' => ['JOHN', 'SARA', 'LYOD'],
'1B' => ['JOHN']
]
这是我得到的快照:
所以现在你可以这样使用它
1A JOHN,SARA,LYOD
2A JOHN,SHIN
$query = $this->xxx->yyy($class_name); //JOINED RESULT
$data = array(
'titlepage' => APP_TITLEPAGE,
'record' => groupResults($query), //This is the result that is sent to the view
'complete' => 'true',
'loadmethod' => 'add',
'contentpage' => 'test_page/detail'
);
$this->load->view('shared/master_app', $data);
现在,在视图中,您可以在此阵列上循环,如下所示:
foreach($record as $class => $names) {
echo "<input type='text' value='" . $class . "'>";
echo "<textarea>" . implode(', ', $names) . "</textarea>";
}
foreach($class=>$name记录){
回声“;
echo“”。内爆(',',$names)。“”;
}
您可以循环遍历名称并创建字符串或任何您需要的内容。如果您需要,我可以为您提供PHP代码…?当然可以。我对任何解决方案都持开放态度。你能给我你在$query中得到的数组吗?你可以循环遍历名称并创建一个字符串或任何你需要的东西。如果你需要,我可以给你PHP代码…?当然。我愿意接受任何解决方案。你能给我你在$query中得到的数组吗?不,我不想查询。我想在PHP中完成它。因为除了显示类
和名称
否之外,我还将联接表
用于另一个目的,所以我不想查询。我想在PHP中完成它。因为除了显示执行groupResults
的CLASS
和NAME
之外,我使用JOINED表的另一个目的是什么?在控制器或视图中。我用CodeIgniter@ashura91您应该在将数据发送到viewAlway@ashura91之前执行它,如果数据作为对象返回,那么使用箭头符号而不是数组:)执行groupResults
?在控制器或视图中。我用CodeIgniter@ashura91在将数据发送到viewAlway@ashura91之前,您应该执行它,如果数据作为对象返回,那么请使用箭头符号,而不是数组:)