1

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

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

好的COLOR是表中的一个 COLSIZE并且PAPER --- 好的准备好,因为这是它变得奇怪的地方......

如果我这样做$this->db->select('PRINTS.SIZE');,我可以遍历表中的DISTINCTSIZE

然而

如果我这样做,$this->db->select('COLOR');我会收到错误:发生数据库错误/错误号:1054 / 未知列'COLOR' in 'field list'

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

4

1 回答 1

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 表中。

最后,我认为最好的方法是在获取数据后进行一些简单的规范化,以便更好地查询数据,并提高应用程序的性能。

于 2012-10-25T20:38:54.800 回答