1

最近、スフィンクスでデータを並べ替えるフィルターの作成を開始しましたが、問題は、興味深いCIバグ(?)に遭遇したことです。WHERECIは結果を独自に並べ替えるだけなので、属性を渡す順序は関係ありません。

これらのクエリの両方が同じ古い結果を返すのはなぜですか?これを修正する方法はありますか?

$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とは何の関係もありません。ほとんどのSQLDBは​​、whereパラメーターを最適化して、指定した順序(括弧や操作規則の順序を除く)ではなく、最も効率的に実行します。

SQLデータベースから結果セットの順序を変更する場合は、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 に答える