php - 带有 codeigniter 的 MySQL DISTINCT ...非常奇怪的行为

标签 php mysql codeigniter activerecord mysqli

好吧,为了简单起见,我需要遍历这个名为 PRINTS 的表中每一列的 DISTINCT 结果现在这里是奇怪的部分......

$this->db->distinct();
$this->db->select('PRINTS.COLOR');
$q = $this->db->get('PRINTS');
return $q->result();

好的 COLOR 是表中的 COL AS IS SIZEPAPER --- 好的,准备好,因为这是它变得奇怪的地方...

如果我执行 $this->db->select('PRINTS.SIZE'); 我可以遍历 SIZE 的 DISTINCT 在表中。

然而

如果我执行 $this->db->select('COLOR'); 我得到错误:发生数据库错误/错误编号:1054/ “字段列表”中的未知列 “COLOR”

同样的事情也发生在 PAPER 上——似乎只有 SIZE 能正常工作。根据 CODEIGNITER DOCS,我需要做的是:$this->db->select('COLOR, PAPER, SIZE'); 但是我得到了一个未知的 COL错误。拼写正确。任何人都可以阐明这一点吗?到底是怎么回事? TY

最佳答案

如果您只需要每种类型的不同行,则必须单独使用这些特定的列。

$this->db->distinct();
$this->db->select('COLOR');
$q = $this->db->get('PRINTS');
$q_color = $q->result();

$this->db->distinct();
$this->db->select('SIZE');
$q = $this->db->get('PRINTS');
$q_size = $q->result();

$this->db->distinct();
$this->db->select('PAPER');
$q = $this->db->get('PRINTS');
$q_paper = $q->result();

正如@Rocket Hazmat 指出的那样,如果您有任何混合结果,它们将被视为不同的行。我的建议是 a) 创建额外的表来保存这些值(首选),或者 b) 使用可用的不同值修改表列。

示例 COLORS 表如下:

Colors
id    | name
----------------------
1     | red
2     | blue
3     | green

然后对此的查询很简单,可以获得所有可用的颜色:

$q = $this->db->get('COLORS');

由于您提到这是从 CSV 文件导入的,我想说您可以在导入 CSV 文件后执行必要的处理以获取不同的值,如上所示,然后将它们放入 COLORS 表中。

最后,我认为最好的方法是做一些 simple normalization一旦您获得数据以便更好地查询它,并提高您的应用程序的性能。

关于php - 带有 codeigniter 的 MySQL DISTINCT ...非常奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13072073/

相关文章:

php - Docker:如何在多个容器/服务之间共享相同的应用程序代码(例如PHP-FPM和NGINX)

php - wordpress posts_orderby 过滤器与插件中的自定义表

php - 网络应用 : code from the ground up or use 3rd party framework?

php - Codeigniter 通过在 uri 中传递 id 来更新数据库行

php - 数据表子行中的二级记录如何显示各自id的?

php - 在 Laravel 的同一页面上有 2 个表单?

关闭子窗口(弹出窗口)后Javascript刷新主页

php - 如何在 foreach 循环的每次迭代中更改 post 值

php - 传递 PHP 变量 onclick

mysql - 如何将大型sql插入拆分为多个插入