【问题标题】:Get All items Group by a specific column values获取所有项目按特定列值分组
【发布时间】:2018-10-07 21:32:12
【问题描述】:

我在 MYSQL 中有一个如下表:

cname | vname | curl
---------------------
A     | 1     | url1
A     | 2     | url2
B     | 1     | url3
B     | 3     | url4
C     | 2     | url5
C     | 3     | url5
C     | 4     | url6
D     | 2     | url7

我想将结果显示如下:

1  |  2  |  3  |  4
-------------------
A  |  A  |  B  |  C
B  |  C  |  C  |
   |  D  |  

简而言之,我试图通过 vnames 显示所有 cnames 组。

我在 Codeigniter 中尝试过以下代码:

$this->db->distinct();
$this->db->select('vname, cname, curl');
$this->db->from('tablename');
$this->db->order_by('cname');
$this->db->group_by('vname');
$res = $this->db->get();
if($res->num_rows()>0)
    var_dump($res->result());

由于var_dump(),我每个 vname 只得到一行;

请为这个问题提供一个解决方案。

【问题讨论】:

  • 不要尝试在 sql 中执行此操作,产生此输出效率非常低。在 php 代码中进行转换
  • 此外,为了容纳任意(未知)数量的vname 值列,您需要动态 SQL,这很不方便。
  • @Shadow Bro 我在上面写过我是在 Codeigniter(一个 PHP 框架)中做的,我也分享了代码。
  • 兄弟,您的 php 代码只生成一个 sql 查询并显示其结果。你不能那样做。
  • @IT Sagar :请这个代码:- $this->db->select('DISTINCT(vname), cname, curl'); $this->db->group_by('vname'); $query = $this->db->get('tablename'); $res = $this->db->get(); if($res->num_rows()>0) var_dump($res->result());

标签: php mysql codeigniter group-by codeigniter-3


【解决方案1】:

使用GROUP_CONCAT

$this->db->select('vname,GROUP_CONCAT(cname SEPARATOR ",") as cname');
$this->db->from('tablename');
$this->db->group_by('vname');
$res = $this->db->get();

输出:

+--------+--------+
| vname  | cname  |
+--------+--------+
| 1      | A,B    |
| 2      | A,C,D  |
| 3      | B,C    |
| 4      | C      |
+--------+--------+ 

【讨论】:

  • 这不会产生预期的输出
猜你喜欢
  • 2019-12-18
  • 1970-01-01
  • 2014-11-21
  • 2014-01-30
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
相关资源
最近更新 更多