【问题标题】:Getting all rows from the table that contain the same values in some columns in CodeIgniter从表中获取包含 CodeIgniter 中某些列中相同值的所有行
【发布时间】:2013-11-27 10:21:11
【问题描述】:

现在我可以通过在 CodeIgniter 中使用这个单一语句从名为 cars 的表中获取所有值:

$this->db->get('cars')->results();

问题是我想根据名为 slug 的列中的相同值选择 ONLY 行,该列是存储的 URL,例如“非常好的待售汽车”或“状况良好的黑色野马”。基本上我想找到所有重复项(但我想稍后将其扩展到名称、描述等,但我现在主要关心的是 slug 列)

我的数据库查询在 CodeIgniter 环境中应该如何只抓取重复项,我的意思是在表中至少两次具有相同 slug 的行?

是否可以通过 CI Active Record 而不是通过自定义 SQL 查询?

【问题讨论】:

    标签: php mysql sql codeigniter


    【解决方案1】:

    首先获取重复记录的 ID,然后将此结果用作子查询。

    $this->db->select('`id`');
    $this->db->from('cars');
    $this->db->group_by('slug');
    $this->db->having('count(slug) > 1');
    $where_clause = $this->db->get_compiled_select();
    
    $this->db->get('cars');
    $this->db->where('`id` IN ($where_clause)', NULL, FALSE); 
    

    【讨论】:

    • 谢谢,但是您的解决方案会抓取包含某些字符串的所有内容,例如它抓住了“blue-volkswagen-2001”,但也抓住了“blue-volkswagen-2005”,这是一个不同的蛞蝓。知道如何解决吗?
    • @user3041274 2 个选项:添加一个 where 条件(上面的答案已更新)或添加另一个有条件。
    • 谢谢,但 slug 可以是任何东西。该怎么做?
    • 当然,在where 条件中使用$slug_value 之类的变量而不是'very-good-car-for-sale',那么它可以是您想要的任何值。
    • 哇,这似乎是部分工作:$this->db->group_by('slug')->having('count(slug) > 1')->get('cars'); 我已将 count(slug) > 2 更改为 count(slug) > 1 但问题是它只选择了第一个重复的行而不是全部 2 或 3 等. 如何解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 2015-10-28
    • 1970-01-01
    • 2018-09-27
    • 2021-02-23
    相关资源
    最近更新 更多