1

質問があります。まず、親がparent_idis0で、子がparent_id等しい親 ID を持つテーブルがあります。parent_idすべての子のうちの 1 つが json エンコードされた配列として格納されます (1 つの子レコードは多くの親を持つことができます)。

では、1 つの親 ID を渡したときに、親のすべての子を取得するにはどうすればよいでしょうか。やってみたけどうまくいかないし、わからない。

コードは次のとおりです。

function get_child_product($parent_id, $limit, $start) {
        $this -> db -> from('product');
        $this -> db -> where(json_decode('parent_id'), $parent_id);
        $this -> db -> limit($limit, $start);
        $this -> db -> order_by('order', 'asc');
        $this -> db -> order_by('id', 'desc');
        $query = $this -> db -> get();
        return $query -> result();
    }

問題が解決しました:

function get_child_product($parent_id, $limit, $start) {
        $this -> db -> from('product');
        $this -> db -> like('parent_id', '"' . $parent_id . '"');
        $this -> db -> limit($limit, $start);
        $this -> db -> order_by('order', 'asc');
        $this -> db -> order_by('id', 'desc');
        $query = $this -> db -> get();
        return $query -> result();
    }
4

3 に答える 3

3

私が正しく理解している場合、データベースに親関係を持つJSONエンコードされた配列があり、特定の親の子のみを取得したいと考えています。問題は、データベース内の JSON オブジェクトは文字列にすぎないということです。クエリでそれらを動的にデコードして、where 句を使用することはできません。

次の 2 つのオプションがあります。

1.すべての子にクエリを実行し、PHP を使用して、デコードされた JSON に基づいてそれらをフィルタリングします

2. mysqllikeを使用して、json 形式の文字列を照合する

function get_child_product($parent_id, $limit, $start) {
    return $this -> db -> from('product')
                    -> like('parent_id', '"parent_id":'.$parent_id)
                    -> limit($limit, $start)
                    -> order_by('order', 'asc')
                    -> order_by('id', 'desc')
                    -> get()
                    -> result();
}

パラメータは JSON の構文と一致する必要があることに注意してlikeください。ID が"引用符で囲まれている場合は、それらをパラメータに追加してください。

于 2013-08-06T17:36:18.523 に答える
1

本気じゃないの?

where('parent_id', decoded($parent_id));

?

于 2013-08-06T17:19:38.217 に答える