Как показать только количество отфильтрованных записей (количество возвращенных данных из поиска, num_rows ()) в codeigniter, jTable

Как показать только количество отфильтрованных записей (количество возвращенных данных из поиска, num_rows ()) в codeigniter, jTable.

Как сейчас, показывает все номера строк из базы данных, независимо от того, сколько результатов поиска у меня есть.
Я не знаю, как решить это. Все, что я хочу, это показать только количество отсчетов отфильтрованных данных. Может кто-нибудь мне помочь?

Вот мой view.php:

<div class="JtableCrud">
<div class="filtering">
<form class="searchbox_1">
Country Name: <input type="text" class="search_1" name="country_name" id="country_name" />
City Name: <input type="text" class="search_1" name="capital_city" id="capital_city" />
Date from <input class="search_1" type="date" name="from_date" id="from_date"/>
Date to <input class="search_1" type="date" value = "<?php echo date('Y-m-d')?>"  name="to_date" id="to_date"/>
<center><button  class="submit_1" type="submit" id="LoadRecordsButton">Search</button>
<input class ="submit_1" type="reset" value="Clear fields!"></center>

</form>
</div>
<div id="countryTable"></div>
<script type="text/javascript">

$(document).ready(function () {

//Prepare jTable
$('#countryTable').jtable({
title: 'Country\'s',
paging: true,
pageSize: 10,
sorting: true,
defaultSorting: 'country_name ASC',
selecting: true,
multiselect: true,
selectingCheckboxes: true,
selectOnRowClick: true,
actions: {
listAction:   'get_country',
createAction: 'create_country',
updateAction: 'update_country',
deleteAction: 'delete_country'
},
fields: {
country_id: {
key: true,
list: false
},
country_name: {
title: 'Country Name'
},
country_code: {
title: 'Country Code'
},
surface_area: {
title: 'Surface Area (m<sup>2</sup>)',
width: '13%'
},
continent_name: {
title: 'Continent Name'
},
continent: {
title: 'Continent Code'
},
population: {
title: 'Population'
},
capital_city: {
title: 'Capital City'
},
record_date: {
title: 'Record Date',
type: 'date',
displayFormat: 'mm/dd/yy',
create: false,
edit: false,
sorting: false
}
},
formCreated: function (event, data) {
data.form.find('input[name="country_name"]').addClass('validate[required]');
data.form.find('input[name="country_code"]').addClass('validate[required], custom[onlyLetterSp][maxSize[2]]]');
data.form.find('input[name="surface_area"]').addClass('validate[required,custom[number]]');
data.form.find('input[name="continent_name"]').addClass('validate[required]');
data.form.find('input[name="continent"]').addClass('validate[required], custom[onlyLetterSp][maxSize[2]]');
data.form.find('input[name="population"]').addClass('validate[required], custom[number]]');
data.form.find('input[name="capital_city"]').addClass('validate[required]');
data.form.validationEngine();
},
formSubmitting: function (event, data) {
return data.form.validationEngine('validate');
},
formClosed: function (event, data) {
data.form.validationEngine('hide');
data.form.validationEngine('detach');
}
});

$('#country_name').autocomplete({
source: 'list_country',
minLength: 0,
scroll: true,
autoFocus: true
}).focus(function() {
$(this).autocomplete("search", "")
.autocomplete( "widget" )
.addClass( "country_field" );
});

$('#capital_city').autocomplete({
source: 'list_city',
minLength: 0,
scroll: true,
autoFocus: true
}).focus(function() {
$(this).autocomplete("search", "")
.autocomplete( "widget" )
.addClass( "country_field" );
});

$('#LoadRecordsButton').click(function (e) {
e.preventDefault();
$('#countryTable').jtable('load', {
country_name: $('#country_name').val(),
capital_city: $('#capital_city').val(),
from_date: $('#from_date').val(),
to_date: $('#to_date').val()
});

});

$('#LoadRecordsButton').click();

});

</script>
</div>

Вот мой model.php:

<?php

class Country_model extends CI_Model {

public function get_country($country_name,$from_date,$to_date,$capital_city)       {

$result = $this->db->query("SELECT SQL_CALC_FOUND_ROWS country_id, country_code, country_name, surface_area,
continent_name, continent, population, capital_city, record_date
FROM  country
WHERE (deleted = 0)
AND (country_name LIKE '%" .$this->db->escape_like_str($country_name) . "%' ) ". "AND (capital_city LIKE '%". $this->db->escape_like_str($capital_city) . "%' ) ". "AND (record_date BETWEEN'" . $from_date . "' AND date_add('" . $to_date . "', INTERVAL 1 DAY)) ". "ORDER BY " . filter_input(INPUT_GET, "jtSorting") . "LIMIT " . filter_input(INPUT_GET, "jtStartIndex") . "," . filter_input(INPUT_GET, "jtPageSize") . ";");

$rows = array();
foreach ($result->result() as $row) {

$rows[] = $row;

}

return $rows;
}

Вот мой controller.php

 <?php

defined('BASEPATH') OR exit('No direct script access allowed');

class country_tas extends CI_Controller {

public function get_country() {

if (empty($this->input->post('to_date'))){
$to_date = date('Y-m-d');
}else {
$to_date = $this->input->post('to_date');
}

$country_name = $this->input->post('country_name');
$capital_city = $this->input->post('capital_city');
$from_date = $this->input->post('from_date');
$this->load->model('Country_model');
$rows = $this->Country_model->get_country($country_name,$from_date,$to_date,$capital_city);
$num_rows = $this->db->count_all_results('country');
$jTableResult = array();
$jTableResult['Result'] = "OK";
$jTableResult['TotalRecordCount'] = $num_rows;
$jTableResult['Records'] = $rows;
print json_encode($jTableResult);

}

0

Решение

$num_rows = $this->db->count_all_results('country');

//this will fetch all records from country table.

//replace it with this:
$num_rows  = count($rows);
0

Другие решения

Хорошо, я решил это!

Чтобы получить это количество строк, включите параметр SQL_CALC_FOUND_ROWS в инструкцию SELECT, а затем вызовите FOUND_ROWS ().

Я добавил в свой запрос SELECT «SQL_CALC_FOUND_ROWS», а затем создал эту функцию:

 public function record_count(){

$num_rows = $this->db->query('SELECT FOUND_ROWS() count;')->row()->count;

return $num_rows;
}

и я назвал это на моем контроллере:

 $jTableResult['TotalRecordCount'] = $this->Country_model->record_count();

Это решило мою проблему. Если у вас есть лучшее решение, пожалуйста, опубликуйте его.

0

По вопросам рекламы [email protected]