【问题标题】:Codeigniter count_all_results then get return error number 1066Codeigniter count_all_results 然后得到返回错误号 1066
【发布时间】:2018-07-28 13:13:18
【问题描述】:

我想在我的查询中使用$this->db->count_all_results() 计算所有结果,然后在不重置任何字段值的情况下获取查询结果($this->db->get)。我已经按照Limiting or Counting Results 上的用户指南进行操作了

但是,此方法还会重置您可能已传递给 select() 的任何字段值。如果需要保留它们,可以将 FALSE 作为第二个参数传递:

我已将 FALSE 参数传递给函数,但出现数据库错误:

错误号:1066 不是唯一的表/别名:'my_table'

这是我尝试过的代码

$this->db->select('title', 'content', 'date');
$this->db->like('title', 'Post');
$this->db->order_by('title', 'DESC');

$records = $this->db->count_all_results('my_table', FALSE);
$query = $this->db->get('my_table', 20);

谢谢

【问题讨论】:

    标签: php mysql codeigniter codeigniter-3 codeigniter-query-builder


    【解决方案1】:

    为什么不像这样计算查询结果集中的行数:

    $this->db->select('title', 'content', 'date');
    $this->db->like('title', 'Post');
    $this->db->order_by('title', 'DESC');
    
    $query = $this->db->get('my_table');
    
    $records = $query->num_rows();
    

    【讨论】:

    • 哦,是的,我忘了。因为我想将查询结果限制为 20。 $query = $this->db->get('my_table', 20);
    • 那么 limit 和 $records 有什么不同,不是相同的值 (20) 吗?我想知道到底有多少条记录,但想限制查询结果。
    • limit 只返回最多此数量的结果。 $records 在我的示例中将返回实际返回的行数 - 即 -
    • 是的,我知道。但我想知道基于sql语句限制之前有多少条记录,然后得到所需限制的查询结果。
    • 你不需要!!!从我的查询中去掉限制部分——这将返回所有结果。然后,您可以根据需要使用$records 变量来显示视图中的行数。简而言之,不设置限制将返回与您的查询匹配的所有行 - 您不需要先知道限制!
    【解决方案2】:

    希望对您有所帮助:

    count_all_results 中创建my_table 的别名,如下所示:

    $this->db->select('p.title, p.content, p.date');
    $this->db->like('p.title', 'title');
    $this->db->order_by('p.date', 'DESC');
    
    $data['count'] = $this->db->count_all_results('my_table p', FALSE);
    $data['records'] = $this->db->get('my_table')->result();
    print_r($data);
    

    更多:http://www.mysqltutorial.org/mysql-alias/

    【讨论】:

    • 你能给我一个关于别名的好参考吗?它是 sql 语句还是 codeigniter 术语?以及为什么我必须使用别名
    • 它对你有用吗?它的 mysql 术语,我已经对其进行了测试并使用了它,请尝试然后让我知道它是否适合您,
    • 我确信它可以工作,但它不容易实现,因为我的selectlike 语句是一个也用于其他函数的数组。我应该在传递给select 之前修改数组中的字符串吗?还是您有其他建议?
    • 在like子句中你可以像文档所说的那样传递一个数组,但是在select子句中你必须像我的回答一样传递逗号分隔的字符串,如果你的选择是一个数组,你可以使用implode方法来转换它以逗号分隔的值,并使用array_map 将表别名添加到数组的每个元素
    • 顺便说一句,如果我的回答对您有帮助,请不要犹豫,将其检查为绿色并进行投票
    猜你喜欢
    • 2012-12-21
    • 2012-09-21
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    相关资源
    最近更新 更多