0

4 つのテーブル (アクティビティ、メモ、カテゴリ、user_entries) をクエリして、アクティビティまたはメモのいずれかである一致を探しています。私の開発データベースには、一致する 8 つのアクティビティと 2 つのメモがあります。代わりに、16 の結果が得られます。各アクティビティが複製されます。1 つの結果には最初のメモが含まれ、もう 1 つの結果には 2 番目のメモが含まれます。

これはそのままのクエリです。

SELECT a.`aid`, a.`activityname`, a.`date`, u.`points`, u.`enid`, c.`catname`, n.`nid`, n.`notename`, n.`dates`
FROM activities a
INNER JOIN user_entries u ON a.`aid` = u.`aid_FK`
INNER JOIN categories c ON a.`category` = c.`cat`
INNER JOIN notes n ON u.`mem_no_FK` = n.`mem_no_FK`
WHERE u.`mem_no_FK` = 1995
GROUP BY a.`aid`, a.`activityname`, a.`date`, u.`points`, u.`enid`, c.`catname`, n.`nid`, n.`notename`, n.`dates`
ORDER BY `date`

私はここでかなりの数の同様の質問を見てきました(特に質問 7696248):しかし、私が試したものは何もうまくいきませんでした. 多くの提案 (DISTINCT あり/なし、GROUP BY あり/なし、多くの結合タイプなど) を試したにもかかわらず、毎回同じ結果が得られます。クエリに基本的に何か問題があります。私の SQL の知識はよくなく、それを修正する方法がわかりません。

誰でも助けることができますか?

編集: 明確にするためにデータベースは、継続的な専門能力開発活動の記録です。メモ (紛らわしい名前ですが、私が書いたものではありません!) はアクティビティにリンクされていません: ユーザーが重要なイベントを記録するためにあります。

メモとアクティビティを同じページにリストする必要があります。可能であれば、1 つの DB クエリを実行したいと思います。そうでない場合は、2 つのクエリを実行して、2 つの結果配列を結合する必要があります。

4

2 に答える 2

0

DISTINCTためしてみてくださいaid

SELECT DISTINCT(a.`aid`), a.`activityname`, a.`date`, u.`points`, u.`enid`, c.`catname`, n.`nid`, n.`notename`, n.`dates`
FROM activities a
INNER JOIN user_entries u ON a.`aid` = u.`aid_FK`
INNER JOIN categories c ON a.`category` = c.`cat`
INNER JOIN notes n ON u.`mem_no_FK` = n.`mem_no_FK`
WHERE u.`mem_no_FK` = 1995
GROUP BY a.`aid`, a.`activityname`, a.`date`, u.`points`, u.`enid`, c.`catname`, n.`nid`, n.`notename`, n.`dates`
ORDER BY `date`
于 2013-05-09T10:56:22.457 に答える
0

1 つの列のすべてのメモを選択する場合は、GROUP_CONCATまたは他の集計関数を使用できます

SELECT a.`aid`, a.`activityname`, a.`date`, u.`points`, u.`enid`, c.`catname`, GROUP_CONCAT(n.`notename` SEPARATOR ' ') as notes
FROM activities a
JOIN user_entries u ON a.`aid` = u.`aid_FK`
JOIN categories c ON a.`category` = c.`cat`
JOIN notes n ON u.`mem_no_FK` = n.`mem_no_FK`
WHERE u.`mem_no_FK` = 1995
GROUP BY a.`aid`
ORDER BY `date`
于 2013-05-09T11:16:17.027 に答える