AND
それをnot aに変更しWHERE
ます:
SELECT p.id, p.username, p.date, p.subject, p.year, p.brand,
p.model, p.type, p.bodywork, p.text, p.image, p.chassis, COUNT(c.id) AS answers
FROM posts_tbl AS p
LEFT JOIN post_reply_tbl AS c
ON c.post_id = p.id
AND c.type = 1 AND c.type = 3
LEFT JOIN post_reply_tbl AS a
ON a.post_id = p.id
AND a.type = 2
GROUP BY p.id
c.type
同時に2つの値を持つことはできないため、これを少し変更する必要があると思います:
SELECT p.id, p.username, p.date, p.subject, p.year, p.brand,
p.model, p.type, p.bodywork, p.text, p.image, p.chassis, COUNT(c.id) AS answers
FROM posts_tbl AS p
LEFT JOIN post_reply_tbl AS c
ON c.post_id = p.id
AND c.type IN (1, 3) -- changed to use an OR
LEFT JOIN post_reply_tbl AS a
ON a.post_id = p.id
AND a.type = 2
GROUP BY p.id
を と の両方にc.type
等しくしたい場合は、次の使用を検討してください。1
3
SELECT p.id, p.username, p.date, p.subject, p.year, p.brand,
p.model, p.type, p.bodywork, p.text, p.image, p.chassis, c.answers
FROM posts_tbl AS p
LEFT JOIN
(
select COUNT(c.id) answers, c.post_id
from post_reply_tbl c
where c.type in (1, 3)
group by c.post_id
having COUNT(distinct type) = 2
) AS c
ON c.post_id = p.id
LEFT JOIN post_reply_tbl AS a
ON a.post_id = p.id
AND a.type = 2
1 つの列のみで を使用しているGROUP BY
ため、MySQL は他の列のどの値が返されるかを決定し、その値は予期しないものになる可能性があります。返される値を確認できる唯一の方法は、各列を集計するか、列ごとにグループ化することです。( GROUP BY に対する MySQL 拡張機能を参照してください)
MySQL ドキュメントから:
MySQL は GROUP BY の使用を拡張して、選択リストが GROUP BY 句で指定されていない非集計列を参照できるようにします。... この機能を使用して、不要な列の並べ替えやグループ化を回避することで、パフォーマンスを向上させることができます。ただし、これは主に、GROUP BY で指定されていない各非集計列のすべての値が各グループで同じ場合に役立ちます。サーバーは各グループから任意の値を自由に選択できるため、それらが同じでない限り、選択された値は不確定です。さらに、各グループからの値の選択は、ORDER BY 句を追加しても影響を受けません。結果セットのソートは値が選択された後に行われ、ORDER BY はサーバーが選択する値には影響しません。
このため、サブクエリを使用して取得する方が良いcount()
場合があります。そうすれば、残りの列に対して正しい結果が返されることが確実になります。
SELECT p.id, p.username, p.date, p.subject, p.year, p.brand,
p.model, p.type, p.bodywork, p.text, p.image, p.chassis, c.answers
FROM posts_tbl AS p
LEFT JOIN
(
select COUNT(c.id) answers, c.post_id
from post_reply_tbl c
where c.type in (1, 3)
) AS c
ON c.post_id = p.id
LEFT JOIN post_reply_tbl AS a
ON a.post_id = p.id
AND a.type = 2