1

評価システムに問題があります。

に一致するものがないLEFT JOIN場合、 を使用すると行がまったく返されませんAVG()

結合に結果がない場合、これは NULL を返します。

SELECT op_id,
       ...,
       rating_stars 

しかし、これは行を削除します。

SELECT op_id,
       ...,
       AVG(rating_stars) 

これは私の最後の試みです:

SELECT op_id,
       op_img,
       op_title,
       op_worktime,
       op_cookingtime,
       CASE rating_stars WHEN null THEN 0 ELSE AVG(rating_stars) END
FROM 
 opskrifter
LEFT JOIN 
  rating 
ON 
  rating.fk_op_id = opskrifter.op_id
WHERE 
  fk_type_id=1 
ORDER BY 
  op_id DESC

すべての結果が必要です。まだ評価されていない場合は、次のように 0 を返す必要があります。

ID        | RATING
--- 1 --- | ---  0  ---
--- 2 --- | ---  4  ---
--- 3 --- | ---  0  ---

しかし、上記の SQL はこれを返します。

ID        | RATING
--- 2 --- | ---  4  ---

問題なくMySQLでこれを行ったと確信しています。

4

1 に答える 1

2

GROUP BYあなたは節を持つ必要があります、

SELECT...
FROM...
WHERE...
GROUP BY op_id,
       op_img,
       op_title,
       op_worktime,
       op_cookingtime
于 2013-03-09T11:28:27.457 に答える