Php 如何显示包含次要成员详细信息的主要成员列表
我正在使用CodeIgniter,我的问题是关于MySQL查询。 我有两张表,分别是成员表和关系表 成员表Php 如何显示包含次要成员详细信息的主要成员列表,php,mysql,codeigniter,Php,Mysql,Codeigniter,我正在使用CodeIgniter,我的问题是关于MySQL查询。 我有两张表,分别是成员表和关系表 成员表 function format ( d ) { return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+ '<tr>'+ '<td>Full name:</td>'+
function format ( d ) {
return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
'<tr>'+
'<td>Full name:</td>'+
'<td>'+d.name+'</td>'+
'</tr>'+
'<tr>'+
'<td>Mobile number:</td>'+
'<td>'+d.phone+'</td>'+
'</tr>'+
'<tr>'
'</table>';
}
$(document).ready(function() {
var oTable =$('#all_list').DataTable( {
"processing": true,
// "serverSide": true,
"pageLength": 10,
"ajax": {
"url": baseUrl+ "/index.php/Search/Listdetails_ajax",
"type": "POST"
},
"columns": [
{
"className": 'details-control',
"orderable": false,
"data": null,
"defaultContent": ''
},
{ "data": "profile_pic","className":"img_list_pic",
"render": function (data, type, full, meta) {
return '<img src='+baseUrl+'/uploads/images/'+data+' class="search_pic">';
}
},
{ "data": "name" },
{ "data": "phone" }
],
"order": [[1, 'asc']],
} );
$('#all_list tbody').on('click', 'td.details-control', function () {
var tr = $(this).closest('tr');
var row = oTable.row( tr );
if ( row.child.isShown() ) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
}
else {
// Open this row
row.child( format(row.data()) ).show();
tr.addClass('shown');
}
} );
} );
我要做的是,根据member\u类型
将所有用户添加到member表中。如果成员类型为1,则该成员为主要成员;如果为2,则为次要成员
关系表
function format ( d ) {
return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
'<tr>'+
'<td>Full name:</td>'+
'<td>'+d.name+'</td>'+
'</tr>'+
'<tr>'+
'<td>Mobile number:</td>'+
'<td>'+d.phone+'</td>'+
'</tr>'+
'<tr>'
'</table>';
}
$(document).ready(function() {
var oTable =$('#all_list').DataTable( {
"processing": true,
// "serverSide": true,
"pageLength": 10,
"ajax": {
"url": baseUrl+ "/index.php/Search/Listdetails_ajax",
"type": "POST"
},
"columns": [
{
"className": 'details-control',
"orderable": false,
"data": null,
"defaultContent": ''
},
{ "data": "profile_pic","className":"img_list_pic",
"render": function (data, type, full, meta) {
return '<img src='+baseUrl+'/uploads/images/'+data+' class="search_pic">';
}
},
{ "data": "name" },
{ "data": "phone" }
],
"order": [[1, 'asc']],
} );
$('#all_list tbody').on('click', 'td.details-control', function () {
var tr = $(this).closest('tr');
var row = oTable.row( tr );
if ( row.child.isShown() ) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
}
else {
// Open this row
row.child( format(row.data()) ).show();
tr.addClass('shown');
}
} );
} );
在关系表中,我定义了用户的关系。例如,primary_member_id
为1,然后次要成员为3和6,次要成员详细信息在成员表中可用
现在,我需要一个查询来显示列表中的所有主要成员,并与它们的次要成员名称和其他详细信息相关
我正在使用带有子行的数据表。这样我就可以在列表中显示主要成员的名称,并单击加号以显示次要成员
我尝试了下面的连接代码
SELECT * FROM `member` LEFT JOIN relation on member.id=relation.primary_member_id WHERE member.member_type=1
下面是上述查询的输出。在本例中,我将获得两次主要成员名称,以及如何显示次要成员名称
我需要一个输出
数据表
function format ( d ) {
return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
'<tr>'+
'<td>Full name:</td>'+
'<td>'+d.name+'</td>'+
'</tr>'+
'<tr>'+
'<td>Mobile number:</td>'+
'<td>'+d.phone+'</td>'+
'</tr>'+
'<tr>'
'</table>';
}
$(document).ready(function() {
var oTable =$('#all_list').DataTable( {
"processing": true,
// "serverSide": true,
"pageLength": 10,
"ajax": {
"url": baseUrl+ "/index.php/Search/Listdetails_ajax",
"type": "POST"
},
"columns": [
{
"className": 'details-control',
"orderable": false,
"data": null,
"defaultContent": ''
},
{ "data": "profile_pic","className":"img_list_pic",
"render": function (data, type, full, meta) {
return '<img src='+baseUrl+'/uploads/images/'+data+' class="search_pic">';
}
},
{ "data": "name" },
{ "data": "phone" }
],
"order": [[1, 'asc']],
} );
$('#all_list tbody').on('click', 'td.details-control', function () {
var tr = $(this).closest('tr');
var row = oTable.row( tr );
if ( row.child.isShown() ) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
}
else {
// Open this row
row.child( format(row.data()) ).show();
tr.addClass('shown');
}
} );
} );
/模型/
您可以使用两个查询来实现它 首先让所有主要成员显示主要成员列表
select * from Member m where m.member_type = 1;
其次,获取该主成员id的所有辅助成员
select * from Member m
join Relation r where m.member_id = r.secondary_member_id and
r.primary_member_id = :primaryMemberId;
按照中所示的使用详细信息弹出窗口的想法,控制器将如下所示:
public function Listdetails_ajax(){
$draw = intval($this->input->get("draw"));
$start = intval($this->input->get("start"));
$length = intval($this->input->get("length"));
$books = $this->Search_model->getTotalList_of_primary();
$data['draw'] = 1;
$data['recordsTotal'] = count($books);
$data['recordsFiltered'] = count($books);
foreach ($books as $key => $row)
{
//print_r($row->customer_id);
$arr_result = array(
"member_id" => base64_encode($this->encryption->encrypt($row->member_id)),
"profile_pic" => $row->profile_pic,
"name" => $row->first_name.' ' .$row->last_name,
"phone" => $row->phone,
"chss_no" => $row->chss_no,
"emp_id" => $row->emp_id,
"address" => $row->address
// "member_type" => $row->member_type
);
$array_secondary = array();
$books_of_secondary = $this->Search_model->getTotalList_of_secondary($row->customer_id);
foreach ($books_of_secondary as $key => $row)
{
//print_r($row->customer_id);
$arr_result2 = array(
"s_member_id" => base64_encode($this->encryption->encrypt($row->member_id)),
"s_profile_pic" => $row->profile_pic,
"s_name" => $row->first_name.' ' .$row->last_name,
"s_phone" => $row->phone,
"s_chss_no" => $row->chss_no,
"s_emp_id" => $row->emp_id,
"s_address" => $row->address
);
$array_secondary[] = $arr_result2;
}
$arr_result['secondary'] = $array_secondary;
$data['data'][] = $arr_result;
}
echo json_encode($data);
exit;
}
function format(d) {
// d is the original data object for the row var val;
if(d.secondary.length == 0) {
return "There are no secondary members";
}
var display = '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">';
for (val of d.secondary) {
display += '<tr>' + '<td>Full name:</td>' + '<td>' + val.s_name + '</td>' + '</tr>' + '<tr>' + '<td>Mobile number:</td>' + '<td>' + val.s_phone + '</td>' + '</tr>';
}
display += '</table>';
return display;
}
然后在format函数中,您将访问secondary
字段以获取secondary数组。也许是这样:
public function Listdetails_ajax(){
$draw = intval($this->input->get("draw"));
$start = intval($this->input->get("start"));
$length = intval($this->input->get("length"));
$books = $this->Search_model->getTotalList_of_primary();
$data['draw'] = 1;
$data['recordsTotal'] = count($books);
$data['recordsFiltered'] = count($books);
foreach ($books as $key => $row)
{
//print_r($row->customer_id);
$arr_result = array(
"member_id" => base64_encode($this->encryption->encrypt($row->member_id)),
"profile_pic" => $row->profile_pic,
"name" => $row->first_name.' ' .$row->last_name,
"phone" => $row->phone,
"chss_no" => $row->chss_no,
"emp_id" => $row->emp_id,
"address" => $row->address
// "member_type" => $row->member_type
);
$array_secondary = array();
$books_of_secondary = $this->Search_model->getTotalList_of_secondary($row->customer_id);
foreach ($books_of_secondary as $key => $row)
{
//print_r($row->customer_id);
$arr_result2 = array(
"s_member_id" => base64_encode($this->encryption->encrypt($row->member_id)),
"s_profile_pic" => $row->profile_pic,
"s_name" => $row->first_name.' ' .$row->last_name,
"s_phone" => $row->phone,
"s_chss_no" => $row->chss_no,
"s_emp_id" => $row->emp_id,
"s_address" => $row->address
);
$array_secondary[] = $arr_result2;
}
$arr_result['secondary'] = $array_secondary;
$data['data'][] = $arr_result;
}
echo json_encode($data);
exit;
}
function format(d) {
// d is the original data object for the row var val;
if(d.secondary.length == 0) {
return "There are no secondary members";
}
var display = '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">';
for (val of d.secondary) {
display += '<tr>' + '<td>Full name:</td>' + '<td>' + val.s_name + '</td>' + '</tr>' + '<tr>' + '<td>Mobile number:</td>' + '<td>' + val.s_phone + '</td>' + '</tr>';
}
display += '</table>';
return display;
}
函数格式(d){
//d是行var val的原始数据对象;
如果(d.secondary.length==0){
返回“没有辅助成员”;
}
变量显示=“”;
对于(d.secondary的val){
显示+='+'全名:'+'+val.s_姓名+'+'+'+'+'+'手机号码:'+'+'+val.s_电话+'+''+';
}
显示+='';
返回显示;
}
感谢您的回复,请给我一个时间来实现这一点。我对您的第二个查询感到困惑。你是说这个链接吗?从成员m连接关系r中选择*其中m.id=r.secondary\u member\u id和r.primary\u member\u id=m.id如何标识:primaryMemberId;?primaryMemberId是第二个查询的动态参数。它应该从您的第一个查询中获得。所以,基本上,一旦你有了一个主要成员列表,你点击一个主要成员来获得它的次要成员,然后你想在第二次查询中传递所选主要成员的id。但是我如何将该查询与CodeIgniter一起使用呢?添加了答案question@Adder,你能帮我解决下面的问题吗?并获取除user…
以外的用户名,以便人们在您再次访问时能够认出您。