私の現在のコードでは、
$sql = "SELECT *, SUM(news_points.points) as `total`
CASE `total` WHEN 0 THEN ORDER BY `news_id` ASC
CASE `total` WHEN NOT 0 THEN ORDER BY `total` DESC
FROM `news`,`news_points`";
私は2つのテーブルを持っていnews
ますnews_points
. 私がしたいのは、という名前の列news
に基づいて選択することです。aにポイントがない場合、またはマイナスの場合は、「良い」ニュースの下に置きます。これは、プラスのポイントがあるか、少なくともマイナスではないニュースです。news_points
points
news
役立つかもしれないいくつかのスキーマ。
news table
news_id -- news_title
1 -- New publication available.
2 -- Check out this new car!
3 -- Something else.
news_points table
point_id -- news_id -- point
1 -- 1 -- 2
2 -- 1 -- 5
3 -- 1 -- -4
4 -- 2 -- 5
5 -- 3 -- -2
上記の例に基づいています。のニュースにnews_id=1
は 3 ポイントnews_id=2
があり、5 ポイントnews_id=3
があり、-2 ポイントがあるため、news_id 2 のニュースが最初になり、news_id 1 のニュースが 2 番目になり、news_id が返される行の最後になります。しかし、それらのいずれにも評価がないか、一部しか評価されていない場合、残りは news_id の降順で表示されます。
結果を正しく取得するには、この SQL をどのように記述すればよいでしょうか?