2012-10-22 33 views
1

最近我开始构建一个筛选器,它将我的数据在狮身人面像中排序,但事情是 - 我遇到了一个有趣的CI错误(?)。我以什么顺序通过我的WHERE属性并不重要,因为CI只会简单地对结果进行排序。为什么'where'关系不重要?

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

$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

您是否尝试使foreach($ a为$ a1)和foreach($ b为$ b1) - 是相同的结果? –

+0

那么,这段代码会输出'Equal',所以它们必须是相同的。 – MJA

+0

一个非常简单的问题。你在查询中看到了订单吗?因为我看不到。如果它不在那里,查询将被默认排序。说得通? – itachi

回答

2

生成的sql查询生成相同的结果集,这就是为什么对象集是相同的。这与CI无关。大多数sql dbs将优化哪些参数最有效地执行,而不是按照您指定的顺序(禁止父项重置或操作规则顺序)执行。

如果你想改变你的结果集从你的SQL数据库的顺序,你需要使用order by。

+0

你会建议做什么?我应该在代码中进行排序吗?它会吃掉我的资源,但我没有看到任何其他方式如何做到这一点。 – MJA

+0

@MatīssJānisbottiņš否,使用CI orm库的函数进行排序。它将在查询中完成,而不是您的代码。 – Ray

0

您自己订购结果。 喜欢的东西:

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

我不熟悉,如果它在CI这样(我不熟悉),但在纯MySQL的order by id=1 DESC会工作。

相关问题