そのため、PHP で現在行われていることを 3 つの個別のクエリに置き換えるために、単一の MySQL クエリを作成しようとしています。ID と名前の 2 つの値のみを持つカテゴリのテーブルがあります。他に 2 つのテーブルがあり、それぞれが最初のテーブルの ID を参照する外部キーを持っています。Categories テーブルからすべての値のリストを取得するだけでなく、他の 2 つのテーブルで各値が参照される回数も取得する必要があります。それぞれに別のクエリを使用して、2 番目のテーブルのそれぞれから正確にカウントを取得できます。
SELECT nga_calevir_event_categories.*, COUNT(nga_calevir_events.event_id) AS event_total
FROM nga_calevir_event_categories
LEFT JOIN (nga_calevir_events)
ON nga_calevir_event_categories.id = nga_calevir_events.event_category
GROUP BY nga_calevir_event_categories.id;
と
SELECT nga_calevir_event_categories.*, COUNT(nga_usermeta.user_id) AS member_total
FROM nga_calevir_event_categories
LEFT JOIN (nga_usermeta)
ON (nga_usermeta.meta_value = nga_calevir_event_categories.id
AND nga_usermeta.meta_key = 'category_id')
GROUP BY nga_calevir_event_categories.id;
ただし、これらのクエリを結合しようとすると、両方のカウントで誤った結果が得られ始めます。結合されたクエリは次のとおりです。
SELECT nga_calevir_event_categories.*,
COUNT(nga_calevir_events.event_id) AS event_total,
COUNT(nga_usermeta.user_id) AS member_total
FROM nga_calevir_event_categories
LEFT JOIN (nga_calevir_events)
ON nga_calevir_event_categories.id = nga_calevir_events.event_category
LEFT JOIN (nga_usermeta)
ON (nga_usermeta.meta_value = nga_calevir_event_categories.id
AND nga_usermeta.meta_key = 'category_id')
GROUP BY nga_calevir_event_categories.id;
最初の行のカウントを 2 倍にしているようです。私はこれを数時間実験してきましたが、それを理解することはできません. 何か案は?これについてさらに情報が必要な場合はお知らせください。