0

古いサイトを更新中です。私が行っていることの 1 つは、データベース クエリを書き直すことです。これは、データベースの構造を変更して、より柔軟で管理者から構成できるようにしたためです。

以前は、一時テーブルに依存する次のクエリ (および他の多くのクエリ) を使用していました。

$query = $this->db->query("SELECT * FROM (SELECT * FROM Links WHERE Cat LIKE ('$c') AND Type LIKE ('%$x%') LIMIT $s, $l) AS T ORDER BY $sort $o");

クエリがより複雑になり、多くの結合が含まれるようになったため、読みやすくするためにアクティブ レコード構文を使用することにしました。問題は、アクティブ レコードを使用してデータに 2 番目の並べ替えを適用する一時テーブルを作成する方法に関する情報が見つからないことです。確かにこれは可能ですか?

これが私の新しいクエリです:

    $this->db
        ->select('*')
        ->from('item_categories')
        ->where('item_categories.cat_id', $c)
        ->or_where('item_categories.parent_id', $c)
        ->or_where('item_categories.gparent_id', $c)
        ->join('item_categories_rel', 'item_categories_rel.cat_id = item_categories.cat_id', 'right')
        ->join('item_entries', 'item_entries.item_id = item_categories_rel.item_id','right')
        ->join('ratings_total', 'ratings_total.item_id = item_entries.item_id')
        ->order_by("item_name", "asc")
        ->limit($l, $s);
        // up to here I want to store as a temporary table then apply next order
        //->order_by($sort, $o); - ideally I want to apply a second order like this
    $result = $this->db->get();

'order by' を 2 回適用したいのですが、これはうまくいきません — アクティブ レコードはその切り口ではありません (または、あいまいである可能性が高くなります)。アクティブ レコード内でこれを行うにはどうすればよいですか?

どんな助けでも大歓迎です。アクティブ レコード アプローチに失敗した場合、結果オブジェクトに並べ替えを適用する方法を誰かが提案できますか?

4

1 に答える 1

0

生成された SQL を確認してみてください: print $this->db->_compile_select()。プラス情報: CI はサブクエリをサポートしていません。

于 2012-09-21T08:59:47.530 に答える