ギャラリーを表示するphpページがあります。すべてのアイテムの下に、良い/悪い投票 (賛成/反対) や閲覧数などの情報を出力します。
コンテンツに挿入された行ごとに、content_views テーブルにも行が挿入されます。ただし、投票テーブルには、誰かが投票した場合にのみ行が含まれます (1 投票 = 1 行)。
特定のカテゴリ (ニッチ) 内のすべての情報 (content.*、ビュー、ある場合は投票) を選択したい。私が抱えている問題は、投票がない場合、クエリ (以下を参照) が空の結果を返すことです。
$result = mysql_query("
SELECT content.*, content_views.views as views, votes.good, votes.bad
FROM content, content_niches, content_views , votes
WHERE content_views.content = content.record_num
AND content.approved = 2
AND content_niches.content = content.record_num
AND votes.content = content.record_num
AND content_niches.niche = '$niche'
AND content.enabled = 1
GROUP BY content.record_num
ORDER BY $orderby DESC LIMIT $from,$max_results") or die(mysql_error());
もちろん、私は次のことを行うことができますが、コンテンツに 50K 行以上あり、さらに多くの投票があるため、これは非常に遅くなります。
$result = mysql_query("
SELECT content.*, content_views.views as views,
(SELECT votes.good FROM votes WHERE votes.content=content.record_num) AS good,
(SELECT votes.bad FROM votes WHERE votes.content=content.record_num) AS bad
FROM content, content_niches, content_views
WHERE content_views.content = content.record_num
AND content.approved = 2
AND content_niches.content = content.record_num
AND votes.video = content.record_num
AND content_niches.niche = '$niche'
AND content.enabled = 1
GROUP BY content.record_num
ORDER BY $orderby DESC LIMIT $from,$max_results") or die(mysql_error());
これを行う「正しい」方法は何ですか?
Edit1: 遅すぎる新しいクエリ、どうすればいいですか?
$result = mysql_query("
SELECT content.*,content_niches.*, content_views.views as views
FROM content
INNER JOIN
content_niches ON (content_niches.content = content.record_num AND content_niches.niche = '$chanid')
INNER JOIN
content_views ON (content_views.content = content.record_num )
LEFT OUTER JOIN votes
ON (votes.video = content.record_num)
WHERE content.approved = 2
AND content.enabled = 1
GROUP BY content.record_num
ORDER BY $orderby DESC LIMIT $from,$max_results") or die(mysql_error());