**編集**
最初の回答のクエリを使用しましたが、セッションがないと複数の調査が返されないため、最終的には変更する必要がありました。私は最終的にこのクエリを解決しました:
(SELECT i.id AS id, i.title AS title, c.title AS ctitle, c.color AS ccolor,
i.active AS active, i.length AS length, i.redirect AS redirect,
COUNT(s.sid) AS number
FROM survey_info i
LEFT JOIN survey_sessions s ON s.sid = i.id
INNER JOIN survey_category c ON i.category = c.id
WHERE s.sid IS NOT NULL
GROUP BY s.sid)
UNION ALL
(SELECT i.id AS id, i.title AS title, c.title AS ctitle, c.color AS ccolor,
i.active AS active, i.length AS length, i.redirect AS redirect,
0 AS number
FROM survey_info i
LEFT JOIN survey_sessions s ON s.sid = i.id
INNER JOIN survey_category c ON i.category = c.id
WHERE s.sid IS NULL)
ORDER BY 2
説明すると、以下のクエリを取得し、セッションがある (取得された) 調査のみを返し、UNION ALL 句を使用して、これらの結果を、セッションを持たない (取得されていない) 調査のみを取得する SELECT と組み合わせます。 .) そして最後に、組み合わせた結果を 2 番目の列 (調査のタイトル) で並べ替えます。
これが他の誰かを助けることを願っています。
-------------------------------------------------- ----------------------------------------------
私は、人々が調査を作成および管理できるようにする調査プログラムに取り組んできました。昨日、私は結果の保存について質問しましたが、すべて間違ったことをしていたことに気付きました (震えるアンケートごとに追加のテーブルを作成してください) 。
私は新しいテーブル構造を手に入れました。これはずっとうまく機能し、常に 6 つのテーブルを維持しています。一晩中取り組んできた新しいジレンマがあり、誰かが私を正しい方向に向けてくれることを願っています.
私のテーブルは次のようになりました:
調査情報
id(bigint) PK
title(varchar)
category(bigint)
length(bigint)
active(tinyint)
調査カテゴリ
id(bigint) PK
title(varchar)
color(varchar)
調査セッション
id PK
timestamp(bigint)
私はもともと次のSQLを使用して、調査とそのセッション数(所要時間)を収集していました
SELECT i.id AS id, i.title AS title, c.title AS ctitle, c.color AS ccolor,
i.active AS active, i.length AS length, i.redirect AS redirect,
COUNT(s.sid) AS number
FROM survey_info i, survey_category c, survey_sessions s
WHERE i.category = c.id AND s.sid = i.id
GROUP BY s.sid
ただし、ご想像のとおり、これは、新しい調査 (まだ実施されていない調査) を作成するたびに、このリストに表示されないことを意味します。これは、survey_session テーブルにエントリがないためです。
survey_sessions に行がない場合、MySQL の条件文を使用して「COUNT(s.sid) AS number」の代わりに 0 を返すことはできますか? 私はLEFT JOINについて多くのことを読んでいましたが、新しい調査をsurvey_sessionsテーブルに接続するものがないため、それらが機能するとは思いませんでした.