Php 如何使用Codeigniter在同一个表中连接1个表和2个外来表?
如何在Codeigniter中将1个表与2个外键连接在同一个表中。我尝试使用SQL进行查询,但当将Codeigniter与DataTable集成在一起时,它将无法工作。下面是codeigniter SQL代码 查询必须如下所示,这很有效:Php 如何使用Codeigniter在同一个表中连接1个表和2个外来表?,php,mysql,codeigniter,Php,Mysql,Codeigniter,如何在Codeigniter中将1个表与2个外键连接在同一个表中。我尝试使用SQL进行查询,但当将Codeigniter与DataTable集成在一起时,它将无法工作。下面是codeigniter SQL代码 查询必须如下所示,这很有效: SELECT * FROM kf_emails JOIN kf_emailserver AS A ON kf_emails.kf_email_incomingserver = A.kf_emailserver_id JOIN kf_emailserver AS
SELECT * FROM kf_emails
JOIN kf_emailserver AS A
ON kf_emails.kf_email_incomingserver = A.kf_emailserver_id
JOIN kf_emailserver AS B
ON kf_emails.kf_email_incomingserver = B.kf_emailserver_id
ORDER BY kf_email_id DESC;
这是在codeigniter中
view.php
<!doctype html>
<html>
<head>
<title></title>
<link rel="stylesheet" href="<?php echo base_url('assets/bootstrap/css/bootstrap.min.css') ?>"/>
<link rel="stylesheet" href="<?php echo base_url('assets/datatables/dataTables.bootstrap.css') ?>"/>
<link rel="stylesheet" href="<?php echo base_url('assets/datatables/dataTables.bootstrap.css') ?>"/>
<style>
.dataTables_wrapper {
min-height: 500px
}
.dataTables_processing {
position: absolute;
top: 50%;
left: 50%;
width: 100%;
margin-left: -50%;
margin-top: -25px;
padding-top: 20px;
text-align: center;
font-size: 1.2em;
color:grey;
}
body{
padding: 15px;
}
</style>
</head>
<body>
<div class="row" style="margin-bottom: 10px">
<div class="col-md-4">
<h2 style="margin-top:0px">Kf_emails List</h2>
</div>
<div class="col-md-4 text-center">
<div style="margin-top: 4px" id="message">
<?php echo $this->session->userdata('message') <> '' ? $this->session->userdata('message') : ''; ?>
</div>
</div>
<div class="col-md-4 text-right">
<?php echo anchor(site_url('kf_emails/create'), 'Create', 'class="btn btn-primary"'); ?>
<?php echo anchor(site_url('kf_emails/excel'), 'Excel', 'class="btn btn-primary"'); ?>
</div>
</div>
<table class="table table-bordered table-striped" id="mytable">
<thead>
<tr>
<th width="80px">No</th>
<th>Kf Email Emailaddress</th>
<th>Kf Email Incomingserver</th>
<th>Kf Email Outgoingserver</th>
<th>Kf Email Emailusername</th>
<th>Kf Email Emailpassword</th>
<th>Kf Email Status</th>
<th width="200px">Action</th>
</tr>
</thead>
</table>
<script src="<?php echo base_url('assets/js/jquery-1.11.2.min.js') ?>"></script>
<script src="<?php echo base_url('assets/datatables/jquery.dataTables.js') ?>"></script>
<script src="<?php echo base_url('assets/datatables/dataTables.bootstrap.js') ?>"></script>
<script type="text/javascript">
$(document).ready(function() {
$.fn.dataTableExt.oApi.fnPagingInfo = function(oSettings)
{
return {
"iStart": oSettings._iDisplayStart,
"iEnd": oSettings.fnDisplayEnd(),
"iLength": oSettings._iDisplayLength,
"iTotal": oSettings.fnRecordsTotal(),
"iFilteredTotal": oSettings.fnRecordsDisplay(),
"iPage": Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength),
"iTotalPages": Math.ceil(oSettings.fnRecordsDisplay() / oSettings._iDisplayLength)
};
};
var t = $("#mytable").dataTable({
initComplete: function() {
var api = this.api();
$('#mytable_filter input')
.off('.DT')
.on('keyup.DT', function(e) {
if (e.keyCode == 13) {
api.search(this.value).draw();
}
});
},
oLanguage: {
sProcessing: "loading..."
},
processing: true,
serverSide: true,
ajax: {"url": "kf_emails/json", "type": "POST"},
columns: [
{
"data": "kf_email_id",
"orderable": false
},{"data": "kf_email_emailaddress"},{"data": "kf_emailserver_serveraddress"},{"data": "kf_emailserver_serveraddress"},{"data": "kf_email_emailusername"},{"data": "kf_email_emailpassword"},{"data": "kf_email_status"},
{
"data" : "action",
"orderable": false,
"className" : "text-center"
}
],
order: [[0, 'desc']],
rowCallback: function(row, data, iDisplayIndex) {
var info = this.fnPagingInfo();
var page = info.iPage;
var length = info.iLength;
var index = page * length + (iDisplayIndex + 1);
$('td:eq(0)', row).html(index);
}
});
});
</script>
</body>
</html>
您可以尝试以下方法:
控制器
public function index() {
$join_str[0] = array('table' => 'category',
'join_table_id' => 'category.category_id',
'from_table_id' => 'product.category_id',
"join_type" => 'left'
);
$condition_array = array();
$data = 'product.*,category.category_name';
$result_product_details = $this->common->select_data_by_condition('product', $condition_array, $data, $sortby = '', $orderby = '', $limit = '', $offset = '', $join_str, $groupby = '');
}
型号
function select_data_by_condition($tablename, $condition_array = array(), $data = '*', $sortby = '', $orderby = '', $limit = '', $offset = '', $join_str = array()) {
$this->db->select($data);
$this->db->from($tablename);
//if join_str array is not empty then implement the join query
if (!empty($join_str)) {
foreach ($join_str as $join) {
if (!isset($join['join_type'])) {
$this->db->join($join['table'], $join['join_table_id'] . '=' . $join['from_table_id']);
} else {
$this->db->join($join['table'], $join['join_table_id'] . '=' . $join['from_table_id'], $join['join_type']);
}
}
}
//condition array pass to where condition
$this->db->where($condition_array);
//Setting Limit for Paging
if ($limit != '' && $offset == 0) {
$this->db->limit($limit);
} else if ($limit != '' && $offset != 0) {
$this->db->limit($limit, $offset);
}
//order by query
if ($sortby != '' && $orderby != '') {
$this->db->order_by($sortby, $orderby);
}
$query = $this->db->get();
//if limit is empty then returns total count
if ($limit == '') {
$query->num_rows();
}
//if limit is not empty then return result array
log_message('debug', 'fetching data result:' . $this->db->last_query());
return $query->result_array();
}
function select_data_by_condition($tablename, $condition_array = array(), $data = '*', $sortby = '', $orderby = '', $limit = '', $offset = '', $join_str = array()) {
$this->db->select($data);
$this->db->from($tablename);
//if join_str array is not empty then implement the join query
if (!empty($join_str)) {
foreach ($join_str as $join) {
if (!isset($join['join_type'])) {
$this->db->join($join['table'], $join['join_table_id'] . '=' . $join['from_table_id']);
} else {
$this->db->join($join['table'], $join['join_table_id'] . '=' . $join['from_table_id'], $join['join_type']);
}
}
}
//condition array pass to where condition
$this->db->where($condition_array);
//Setting Limit for Paging
if ($limit != '' && $offset == 0) {
$this->db->limit($limit);
} else if ($limit != '' && $offset != 0) {
$this->db->limit($limit, $offset);
}
//order by query
if ($sortby != '' && $orderby != '') {
$this->db->order_by($sortby, $orderby);
}
$query = $this->db->get();
//if limit is empty then returns total count
if ($limit == '') {
$query->num_rows();
}
//if limit is not empty then return result array
log_message('debug', 'fetching data result:' . $this->db->last_query());
return $query->result_array();
}