2

名前と彼が登録したイベントの数を含む顧客のリストを出力したいと思います。

このような:

 max (3)Sports,Food,Cinema
 tom (2) Food, Sports

私はそれを働かせることができません。私はいつもこの結果を得ます:

 max Sports
 max Food
 max Cinema
 tom Food
tom Sports

私はほぼこのテーブルのセットアップを持っています:

+-----+-----------+-------+-----+
+ CID + Customer  + misc..+ ... +
+-----+-----------+-------+-----+
+ 1   +   max      +  abc  + ... +
+-----+-----------+-------+-----+
+ 2   +  tom      +  xyz  + ... +
+-----+-----------+-------+-----+


+-----+------------+--------+---------+-----+
+ EID + RID        + Event  + misc... + ... +
+-----+------------+--------+---------+-----+ 
+ 1   +            + Sports + misc... + ... +
+-----+------------+--------+---------+-----+ 
+ 2   +            + food   + misc... + ... +
+-----+------------+--------+---------+-----+ 
+ 3   +            + cinema + misc... + ... +
+-----+------------+--------+---------+-----+ 
+ 4   +            + Event  + misc... + ... +
+-----+------------+--------+---------+-----+ 


+-----+-----+-----+
+ RID + EID + CID +
+-----+-----+-----+
+ 1   + 1   + 1   +
+-----+-----+-----+
+ 2   + 2   + 1   +
+-----+-----+-----+
+ 3   + 3   + 1   +
+-----+-----+-----+
+ 4   + 1   + 2   +
+-----+-----+-----+
+ 5   + 2   + 2   +
+-----+-----+-----+

GROUP_CONCAT() で試してみましたが、これはうまくいかないようです....

すべてのテーブルを結合しましたが、このタスクを解決するには 2 つのクエリが必要だと思います。

whileループで選択を試みましたが、これは非常に遅いです....

私はこれを試しました:

$sql1 = "SELECT  et.Art,  et.Kategorie, et.ID, et.Event AS Event1,
  GROUP_CONCAT( loc.ORT )       AS ORT1
  FROM ".DB_CUSTOMERS_TABLE."      AS et
  JOIN ".DB_RELATIONS_TABLE." AS rel
  ON (et.id =  rel.EID)
  JOIN ".DB_EVENT_TABLE."  AS loc
  ON (loc.Location_ID = rel.Location_ID)
  GROUP BY rel.EID
       ";

どうすればこの問題をうまく解決できるか、アイデアが必要です。

読むためのthx。混乱しないことを願っています。

4

2 に答える 2

0

リストしたいフィールド以外を選択しているすべてのフィールドでグループ化する必要があります。クエリが質問で指定された情報と一致しないため、わかりにくいですが、例を簡略化すると次のようになります。

SELECT Name, GROUP_CONCAT(Event)
FROM table
GROUP BY Name

したがって、次のように簡単になる場合があります。

$sql1 = "SELECT  et.Art,  et.Kategorie, et.ID, et.Event AS Event1,
  GROUP_CONCAT( loc.ORT )       AS ORT1
  FROM ".DB_CUSTOMERS_TABLE."      AS et
  JOIN ".DB_RELATIONS_TABLE." AS rel
  ON (et.id =  rel.EID)
  JOIN ".DB_EVENT_TABLE."  AS loc
  ON (loc.Location_ID = rel.Location_ID)
  GROUP BY et.Art,  et.Kategorie, et.ID, et.Event 
       ";

しかし、質問の情報が与えられた後、それが実際にあなたが何をしているのかはわかりません。

返すクエリがある場合:

 Name Event
 max  Sports
 max  Food
 max  Cinema
 tom  Food
 tom  Sports

上記の単純なグループ連結の例でラップするだけです。

SELECT Name, GROUP_CONCAT(Event)
FROM (Your query) as sub
GROUP BY Name
于 2013-06-07T14:51:27.627 に答える