好吧,为了简单起见,我需要遍历这个名为 PRINTS
的表中每一列的 DISTINCT
结果现在这里是奇怪的部分......
$this->db->distinct();
$this->db->select('PRINTS.COLOR');
$q = $this->db->get('PRINTS');
return $q->result();
好的 COLOR
是表中的 COL AS IS SIZE
和 PAPER
--- 好的,准备好,因为这是它变得奇怪的地方...
如果我执行 $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/