Php 为什么';“where”的顺序不重要吗?

Php 为什么';“where”的顺序不重要吗?,php,codeigniter,Php,Codeigniter,最近,我开始构建一个过滤器,在sphinx中对我的数据进行排序,但问题是-我遇到了一个有趣的CI bug(?)。我以什么顺序传递我的WHERE属性并不重要,因为CI只会自己对结果进行排序 为什么这两个查询都返回相同的旧结果?有没有办法解决这个问题 $a = $this->db->from('table') ->where('id', 1) ->or_where('id', 2) ->

最近,我开始构建一个过滤器,在sphinx中对我的数据进行排序,但问题是-我遇到了一个有趣的CI bug(?)。我以什么顺序传递我的
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';

生成的sql查询产生相同的结果集,这就是为什么对象集是相同的。这与CI无关。大多数sql DB将优化where参数以最有效地执行,而不是按照您在其中指定的顺序(不包括parenthasis或操作顺序规则)


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

自行对结果进行排序。 比如:

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

我不熟悉它在CI中是否是这样工作的(我不熟悉),但是在纯MySQL中,按id=1描述的顺序
会工作。

您是否尝试过使foreach($a作为$a1)和foreach($b作为$b1)的结果相同?好吧,这段代码将输出
相等,因此它们必须是相同的。一个非常简单的问题。您在查询中看到order by了吗?因为我看不见。如果不存在,则默认情况下将对查询进行排序。有道理吗?你建议怎么做?我应该在代码中进行后期排序吗?它会消耗我的资源,但我看不到任何其他方法可以做到这一点。@MatīssJĀnisĀboltiņšno,使用CI orm库的order by函数进行排序。它将在查询中完成,而不是在代码中完成。