1

最近我开始构建一个过滤器,在 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';
4

2 回答 2

2

生成的 sql 查询产生相同的结果集,这就是对象集相同的原因。这与 CI 无关。大多数 sql dbs 将优化 where 参数以最有效地执行,而不是按您指定它们的顺序(除非括号或操作规则的顺序)。

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

于 2012-10-22T03:04:52.420 回答
0

自行订购结果。就像是:

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

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

于 2012-10-22T03:07:34.063 回答