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

时间:2012-10-25 15:31:40

标签: php mysql codeigniter activerecord mysqli

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

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

确定COLOR是表格中的COL {是SIZEPAPER ---好了准备,因为这是奇怪的地方......

如果我$this->db->select('PRINTS.SIZE');,我可以遍历表格中DISTINCT的{​​{1}}值。

无论其

如果我SIZE我收到错误:发生数据库错误/错误号码:1054 / 未知列$this->db->select('COLOR');

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

1 个答案:

答案 0 :(得分:1)

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

$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以便更好地查询数据,并提高应用的效果。