【发布时间】:2015-05-13 17:06:14
【问题描述】:
当我尝试将距离输入到 5 时,我在排序数据时遇到了一些问题,我遇到了这个错误:
Unknown column 'dystans' in 'having clause'
SELECT COUNT(*) AS `numrows` FROM `meet` JOIN `category` ON `category`.`id` = `meet`.`category_id` HAVING `dystans` <= '5' ORDER BY `when` ASC
Filename: C:/xamppNew/htdocs/dzielimypasje/application/controllers/Meetings.php
Line Number: 177
我正在使用 codeigniter。第177行是这个
$data['count'] = $count = $this->db->count_all_results();
我的控制器:
$lat = $this->session->userdata('lat');
$lng = $this->session->userdata('lng');
// To pagination
$this->load->library('pagination');
$limit = 10;
$offset = $this->uri->segment(4);
$this->db->start_cache();
$this->db->select('*, meet.id,
(6731 * acos( cos( radians( '.$lat.')) * cos( radians( meet.lat)) *
cos( radians( meet.lng) - radians( '.$lng.')) + sin( radians( '.$lat.')) *
sin( radians( meet.lat)))) AS dystans');
//data from search engine
$level = $this->input->post('level');
$cat = $this->input->post('category');
$dystans = $this->input->post('dystans');
$when = $this->input->post('when');
if ($level) {
$this->db->where('level', $level);
}
if ($cat) {
$this->db->where('category_id', $cat);
}
if ($when) {
$this->db->where('when <=', $when);
}
if ($dystans) {
$this->db->having('dystans <=', $dystans);
}
$this->db->order_by('when', 'ASC');
$this->db->from('meet');
$this->db->join('category', 'category.id = meet.category_id');
$this->db->stop_cache();
// count for pagination
$data['count'] = $count = $this->db->count_all_results();
// to pagination
$this->db->limit($limit, $offset);
$data['meetings'] = $this->db->get();
$this->db->flush_cache();
$config = some config for pagination ...
$this->pagination->initialize($config);
$data['pagination'] = $this->pagination->create_links();
$this->load->view( 'site/meetings/index' , $data );
查看:
<select type="text" name="dystans" placeholder="distance">
<option value="">Odległość</option>
<option value="1">Do 1 km</option>
<option value="2">Do 2km</option>
<option value="5">Do 5km</option>
<option value="10">Do 10km</option>
</select>
知道如何解决这个问题吗?可能它有缓存但我不确定,我是新的。
【问题讨论】:
-
dystans列在哪个表中?when在哪个表中?告诉我,我会解决您的问题。 -
dystans 在这里创建:$this->db->select('*, meet.id, (6731 * acos( cos( radians( '.$lat.')) * cos( radians ( meet.lat)) * cos( 弧度( meet.lng) - 弧度('.$lng.')) + sin( 弧度('.$lat.')) * sin( 弧度( meet.lat))) ) 作为反抗者');何时、级别、表中的 category_id 相遇
-
您是否希望字段级别、category_id、when、dystans 是可过滤的,这意味着用户可以输入其中的任何一个,并且查询将根据他们列出的数量进行过滤?如果是这种情况,这些字段中的任何一个是否总是通过邮件传递?还是只会通过这些字段中的一个?例如,如果用户发布了关卡,他们何时无法发布?
-
是的,我想成为可过滤的,并且类别和级别工作正常。现在它们通过邮寄方式传递,用户可以同时按几个字段排序。但后来我必须弄清楚一些事情,因为你看到我有分页,所以如果用户从帖子转到下一页数据将会消失,所以它不会正常工作。但现在的主要问题是我不知道为什么我不能按dystans 排序
-
我正在努力重构它。我以前做过这一切。我在这里有一个帖子,解释了过滤器的分页,我也会链接到你。
标签: codeigniter sorting caching