Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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编辑和删除组_concat()上的每个数据_Php_Mysql_Codeigniter_Grouping_Group Concat - Fatal编程技术网

Php 如何使用codeigniter编辑和删除组_concat()上的每个数据

Php 如何使用codeigniter编辑和删除组_concat()上的每个数据,php,mysql,codeigniter,grouping,group-concat,Php,Mysql,Codeigniter,Grouping,Group Concat,我需要编辑或删除组_CONCAT上的每个数据。关于我的主要问题是如何传递每个数据的id 我需要,如果我将光标添加到斯瓦希里语或物理学上的那些主题,我们可以预期鼠标光标在主题上会随着编辑页面或删除页面上该主题id的链接移动 这是我的主题模型代码: public function set_subject_get($idSchool){ $this->db->select('standards_name, GROUP_CONCAT(subject_name SEPARATOR &q

我需要编辑或删除组_CONCAT上的每个数据。关于我的主要问题是如何传递每个数据的id

我需要,如果我将光标添加到斯瓦希里语或物理学上的那些主题,我们可以预期鼠标光标在主题上会随着编辑页面或删除页面上该主题id的链接移动

这是我的主题模型代码:

public function set_subject_get($idSchool){
    $this->db->select('standards_name, GROUP_CONCAT(subject_name SEPARATOR " || ") as subject, 
    GROUP_CONCAT(subject_id) as subjectid');
    $this->db->from('subjects');
    $this->db->join('standards', 'standards_id = subject_standard_id');
    $this->db->where('subject_school_id', $idSchool);
    $this->db->group_by('subject_standard_id');
    $query = $this->db->get();
    return $query->result();
}
在查看页面上,我有如下代码:

if($subjects > 0){
    $n = 1;
    foreach($subjects as $data){
        ?>
        <tr>
            <th scope="row"><?php echo $n;?></th>
            <td><?php echo $data->standards_name; ?></td>
            <td><?php echo $data->subject; ?></td>
        </tr>
        <?php
        $n++;
    }
}else{
    //...
主题表包含这些信息

请你帮我继续这部分,谢谢你的代码

$this->db->select('standards_name, GROUP_CONCAT(`subject_id`,',', subject_name ORDER BY `subject_id` SEPARATOR " || ") as subject, 
那看起来像

$str = '3,history || 4,english || 5,geography || 6,ada || 7,ada || 8,ada || 9,s || 10,s ';
$combine = explode("||", $str);
foreach ($combine as $tex) {
    $id_split = explode(",", trim($tex));
    echo "<a href='www.webpage.de?id=".$id_split[0]."'>".$id_split[1]."</a></br>";
}
结果呢

<a href='www.webpage.de?id=3'>history</a></br>
<a href='www.webpage.de?id=4'>english</a></br>
<a href='www.webpage.de?id=5'>geography</a></br>
<a href='www.webpage.de?id=6'>ada</a></br>
<a href='www.webpage.de?id=7'>ada</a></br>
<a href='www.webpage.de?id=8'>ada</a></br>
<a href='www.webpage.de?id=9'>s</a></br>
<a href='www.webpage.de?id=10'>s</a></br>
这当然是top如何做到这一点的唯一例子

这个答案的最终结果将是

您的代码可以

$this->db->select('standards_name, GROUP_CONCAT(`subject_id`,',', subject_name ORDER BY `subject_id` SEPARATOR " || ") as subject, 
那看起来像

$str = '3,history || 4,english || 5,geography || 6,ada || 7,ada || 8,ada || 9,s || 10,s ';
$combine = explode("||", $str);
foreach ($combine as $tex) {
    $id_split = explode(",", trim($tex));
    echo "<a href='www.webpage.de?id=".$id_split[0]."'>".$id_split[1]."</a></br>";
}
结果呢

<a href='www.webpage.de?id=3'>history</a></br>
<a href='www.webpage.de?id=4'>english</a></br>
<a href='www.webpage.de?id=5'>geography</a></br>
<a href='www.webpage.de?id=6'>ada</a></br>
<a href='www.webpage.de?id=7'>ada</a></br>
<a href='www.webpage.de?id=8'>ada</a></br>
<a href='www.webpage.de?id=9'>s</a></br>
<a href='www.webpage.de?id=10'>s</a></br>
这当然是top如何做到这一点的唯一例子

这个答案的最终结果将是
更改模型中要使用的sql。用于您的组连接

$this->db->选择'standards_name,GROUP_CONCAT`subject_id`,'.',subject_name ORDER BY`subject_id` SEPARATOR | |作为主题, 因此,您的查询结果如下所示

$str = '3,history || 4,english || 5,geography || 6,ada || 7,ada || 8,ada || 9,s || 10,s ';
$combine = explode("||", $str);
foreach ($combine as $tex) {
    $id_split = explode(",", trim($tex));
    echo "<a href='www.webpage.de?id=".$id_split[0]."'>".$id_split[1]."</a></br>";
}
$subjects=[ “1.斯瓦希里语| | | 2.物理| | | 11.aas”, “3.历史| | | 4.英语| | | 5.地理| | 6.阿达| | | 7.阿达| | 8.阿达| | 9.s | | | 10.s”, “17.斯瓦希里语18.英语19.历史20.公民”, “12.as | | | 13.asa | | 14.asa | | 15.maarifa yajamii | | 16.sayansi” ]; 然后创建一个函数:

函数subject\u names\u to\u links$str,$url=null{ $domain=is_null$url?“/”:$url; $str_arr=explode'| |',$str; $links\u arr=array\u mapfunction$主题使用$str\u arr$域{ $subject=trim$subject; $subject_arr=分解',$subject; $subject\u link=sprintf,$domain,$subject\u arr[0],$subject\u arr[1]; 返回$subject\u链接; },$str_arr; 返回内爆“| |”,$links_arr; } 在视图中使用此功能,以生成链接


更改模型中要使用的sql。用于您的组连接

$this->db->选择'standards_name,GROUP_CONCAT`subject_id`,'.',subject_name ORDER BY`subject_id` SEPARATOR | |作为主题, 因此,您的查询结果如下所示

$str = '3,history || 4,english || 5,geography || 6,ada || 7,ada || 8,ada || 9,s || 10,s ';
$combine = explode("||", $str);
foreach ($combine as $tex) {
    $id_split = explode(",", trim($tex));
    echo "<a href='www.webpage.de?id=".$id_split[0]."'>".$id_split[1]."</a></br>";
}
$subjects=[ “1.斯瓦希里语| | | 2.物理| | | 11.aas”, “3.历史| | | 4.英语| | | 5.地理| | 6.阿达| | | 7.阿达| | 8.阿达| | 9.s | | | 10.s”, “17.斯瓦希里语18.英语19.历史20.公民”, “12.as | | | 13.asa | | 14.asa | | 15.maarifa yajamii | | 16.sayansi” ]; 然后创建一个函数:

函数subject\u names\u to\u links$str,$url=null{ $domain=is_null$url?“/”:$url; $str_arr=explode'| |',$str; $links\u arr=array\u mapfunction$主题使用$str\u arr$域{ $subject=trim$subject; $subject_arr=分解',$subject; $subject\u link=sprintf,$domain,$subject\u arr[0],$subject\u arr[1]; 返回$subject\u链接; },$str_arr; 返回内爆“| |”,$links_arr; } 在视图中使用此功能,以生成链接


在给定的模型方法中,您对sql的干预越多,重用该方法的可能性就越小;因此,构建一些简单的东西。仅仅为了分割您在不同层中合并的内容而被sql的聚合函数的魔力所诱惑,这并没有什么专业/功能上的优势。保持它的简单、干净和可重复使用

如果需要对结果进行排序,请在模型的sql中进行排序

控制器:

$grouped = [];
foreach ($this->SubjectsModel->getSubjectsBySchoolId($schoolId) as $obj) {
    $grouped[$obj->subject_standard_id][$obj->subject_id] = $obj->subject;
}
$this->load->view('subjects', ['groupedSubjects' => $grouped]);
型号:

function getSubjectsBySchoolId(int $schoolId): array
{
    return $this->db
        ->get_where('subjects', ['subject_school_id' => $schoolId])
        ->result();
}
视图:

您将需要修改生成的html以适应您的表结构和链接文本,但这将演示要使用的关键部分

从控制器传递到视图的数据结构尽可能精简。您不需要检查数组是否为空。数组将存在,并且foreach只有在有数据要迭代时才会迭代


我相信编辑/删除点击将加载一个新页面,并且链接点击不会直接修改数据库。我这样说是因为数据库写入操作不能由$\u GET请求触发,它们应该由$\u POST请求交付。

在给定的模型方法中,您对sql的干预越多,就越不可能重复使用该方法;因此,构建一些简单的东西。仅仅为了分割您在不同层中合并的内容而被sql的聚合函数的魔力所诱惑,这并没有什么专业/功能上的优势。保持它的简单、干净和可重复使用

如果需要对结果进行排序,请在模型的sql中进行排序

控制器:

$grouped = [];
foreach ($this->SubjectsModel->getSubjectsBySchoolId($schoolId) as $obj) {
    $grouped[$obj->subject_standard_id][$obj->subject_id] = $obj->subject;
}
$this->load->view('subjects', ['groupedSubjects' => $grouped]);
型号:

function getSubjectsBySchoolId(int $schoolId): array
{
    return $this->db
        ->get_where('subjects', ['subject_school_id' => $schoolId])
        ->result();
}
视图:

您将需要修改生成的html以适应您的表结构和链接文本,但这将演示要使用的关键部分

从控制器传递到视图的数据结构尽可能精简。您不需要检查数组是否为空。数组将存在,并且foreach只有在它有数据时才会迭代 文盲


我相信编辑/删除点击将加载一个新页面,并且链接点击不会直接修改数据库。我之所以这样说,是因为数据库写入操作不能由$\u GET请求触发,它们应该由$\u POST请求触发。

感谢您抽出时间,您能告诉我如何在视图的链接上添加id吗?因为如果您回显$data->subjects,演示将显示id,subject | id,因此,如何在链接上添加id。你已经尝试了很多来回答这个问题,请你继续完成这个任务,谢谢你花时间。你能告诉我如何在视图的链接上添加id吗?因为如果你要回显$data->subjects,演示将显示id,subject | | id,subject,那么你如何在链接上添加id呢。为了回答这个问题,你已经尝试了很多。请你继续完成这个问题。答案缺少教育性的解释。这个答案缺少教育性的解释。