条件に当てはまるレコードをランダムで、1レコードのみLEFT JOINしたい
ORDER BY RAND()後にGROUP BYできないので大変。
- ORDER BY RAND()状態で一時テーブルを作る
- LEFT JOIN時にGROUP BYする
でOK。
- テーブル
- place
- 場所テーブル
- place_comment
- 場所へのコメント情報テーブル
- image_pathを持ち、nullでないレコードをJOINしたい
- tmp_place_comment
- 一時テーブル
- place
/* 一時テーブル作成 */ CREATE TEMPORARY TABLE IF NOT EXISTS tmp_place_comment ( id__place INTEGER UNSIGNED NOT NULL, image_path VARCHAR(255) BINARY ) ENGINE=InnoDB DEFAULT CHARSET=UTF8 COLLATE=UTF8_UNICODE_CI; /* 一時テーブルにオリジナルテーブルの内容を乱順でコピー */ INSERT INTO tmp_place_comment SELECT id__place, image_path FROM place_comment WHERE '' != image_path /* image_pathが空のレコードを弾く */ ORDER BY RAND(); /* セレクト */ SELECT place.*, A.image_path FROM place LEFT JOIN( SELECT * FROM tmp_place_comment GROUP BY id__place ) AS A ON place.id = A.id__place WHERE id__country = $id__country; /* ちゃんとエスケープしてね */