0

私は現在phpとcodeigniterを学んでおり、クエリを組み合わせて高速かつ効果的にしたいと考えています。全部作ったけど、最後のテーブルにまだ入ってない…

投稿、ユーザー、post_categories、カテゴリの 4 つのテーブルがあります。

ここに画像の説明を入力

そして、私が取得したいもの:

  1. すべての投稿
  2. usr_id を使用したユーザー情報
  3. cat_ids を使用して post_categories からすべてのカテゴリ ID を取得する
  4. id_* を使用して各カテゴリの名前を取得します

これが最終的な結果です...各id_*のカテゴリ名を取得するのに苦労しているため、完全ではありません

$data = $this->db->select('p.*, u.nickname, u.usr_status, u.usr_rating, pc.*')
                    ->from('posts p')
                    ->join('users u', 'p.usr_id = u.id', 'left')
                    ->join('post_categories pc', 'p.cat_ids = pc.id', 'left')
                    ->limit($limit, $start)
                    ->order_by('p.id', 'desc')
                    ->where('p.active', 1)
                    ->get()
                    ->result_array();

このクエリを codeigniter で終了するのを手伝ってくれる人はいますか?

編集: post_categories で: id_1 は常に ... になりますが、id_2 と id_3 は NULL (デフォルト値) のままになる可能性があります

4

1 に答える 1

2

次のクエリのようなものSQLがうまくいくはずです...

SELECT 
    posts.*,
    users.nickname, users.user_status, users.usr_rating,
    c1.category as category_1,
    c2.category as category_2,
    c3.category as category_3
FROM posts
INNER JOIN users ON user.id = posts.user_id
INNER JOIN post_dategories ON post_categories.id = posts.cat_ids
INNER JOIN categories c1 ON post_categories.id_1 = c1.id
LEFT JOIN categories c2 ON post_categories.id_2 = c2.id
LEFT JOIN categories c3 ON post_categories.id_3 = c3.id
WHERE posts.active = 1

注: LEFT JOINオプションであるc2c3あなたが言ったので

于 2013-09-22T15:20:01.110 に答える