为什么`where` attrs的顺序不重要?

时间:2012-10-22 02:54:33

标签: php codeigniter

最近我开始构建一个过滤器,用于在sphinx中对我的数据进行排序,但问题是 - 我遇到了一个有趣的CI错误(?)。我传递WHERE属性的顺序无关紧要,因为CI只会自行对结果进行排序。

为什么这两个查询都返回相同的旧结果,是否有办法解决这个问题?

$a = $this->db->from('table')
              ->where('id', 1)
              ->or_where('id', 2)
              ->get()->result();

$b = $this->db->from('table')
              ->where('id', 2)
              ->or_where('id', 1)
              ->get()->result();

if ($a == $b) echo 'Equal';

2 个答案:

答案 0 :(得分:2)

生成的sql查询生成相同的结果集,这就是对象集相同的原因。这与CI无关。大多数sql dbs将优化where参数以最有效地执行,而不是按照你指定的顺序优化(禁止父项强调或操作规则的顺序)。

如果要从sql db更改结果集的顺序,则需要使用order by。

答案 1 :(得分:0)

自行订购结果。 类似的东西:

order_by("id=1", "desc");

我不熟悉它是否在CI中以这种方式工作(我不熟悉它),但在纯粹的MySQL中order by id=1 DESC会起作用。