【问题标题】:Grouping in activerecord codeigniter在activerecord codeigniter中分组
【发布时间】:2014-03-12 19:09:38
【问题描述】:

我在 codeigniter 中使用 activerecord。 我有一个看起来像这样的数据库:

+------------+--------------|----------+
|clientName  | websiteNumber|langNumber|
|------------|--------------|----------|
|john        | 1            | 2,5      |
|john        | 2            | 2,3      |
|mark        | 1            | 15,5     |
|steve       | 1            | 5        |
|steve       | 2            | 5        |
|amy         | 1            | 15       |
+------------+--------------+----------+

我想按 clientName 分组,然后按 websiteNumber,这样视图看起来像这样:

  john
    websiteNumber 1 langNumber 2,5
    websiteNumber 2 langNumber 2,3
  mark
    websiteNumber 1 langNumber 15,5
  steve
    websiteNumber 1 langNumber 5
    websiteNumber 2 langNumber 5
  amy
    websiteNumber 1 langNumber 15

我不担心 HTML 或如何解析结果。我想知道使用活动记录使用一个查询的最佳方法,让它返回一个数组,然后我可以在视图中循环。

我想到了一些 hacky 方法——比如在 foreach 循环中查询,但感觉不对,我希望有更好的方法。

【问题讨论】:

  • 我最终只是在模型中进行了另一个查询。 $this->db->order_by('websiteNumber');$this->db->get('main')。这可行,但我仍然想知道是否有办法通过一个查询来做到这一点。

标签: php sql codeigniter activerecord


【解决方案1】:

我不是活跃的记录专家,但我想您应该在客户端名称上使用 group by,然后将 group_concat 与 php explode 结合使用。

我对活动记录的经验是,您应该期待与mysql_fetch_assoc 相同的输出。没有Doctrine那么成熟

【讨论】:

    【解决方案2】:

    你需要使用order_by方法:

    $this->db->order_by('clientName', 'asc');
    $this->db->order_by('websiteNumber', 'asc');
    
    $query = $this->db->get('client');
    
    return $query->result_row();
    

    【讨论】:

    • 这只会按clientName排序,然后按websiteNumber,我希望返回一个按clientName对websiteNumber和langNumber进行分组的数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    相关资源
    最近更新 更多