最近我开始构建一个过滤器,用于在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';
答案 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
会起作用。