0

組織名、その郵便番号、組織に属するすべてのイベント、およびそのイベントの郵便番号の結果を取得するMySQLクエリを作成しようとしています。私はあらゆる種類の結合、結合、および選択の組み合わせを試しましたが、役に立ちませんでした。これは可能ですか?(組織アドレスとイベントアドレス用に別々のテーブルを作成することもできますが、1つのテーブルのみを使用できるように思われます)

私のテーブル構造:

mysql> DESCRIBE cc_organisations;
+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| id          | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| user_id     | int(10) unsigned | NO   | MUL | NULL    |                |
| type        | enum('C','O')    | YES  |     | NULL    |                |
| name        | varchar(150)     | NO   | MUL | NULL    |                |
| description | text             | YES  |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

mysql> DESCRIBE cc_events;
+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| id          | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| org_id      | int(10) unsigned | NO   | MUL | NULL    |                |
| name        | varchar(150)     | NO   | MUL | NULL    |                |
| start_date  | int(11)          | NO   | MUL | NULL    |                |
| end_date    | int(11)          | YES  | MUL | NULL    |                |
| start_time  | int(11)          | NO   |     | NULL    |                |
| end_time    | int(11)          | NO   |     | NULL    |                |
| description | text             | YES  |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)

mysql> DESCRIBE cc_addresses;
+--------------+------------------+------+-----+---------+----------------+
| Field        | Type             | Null | Key | Default | Extra          |
+--------------+------------------+------+-----+---------+----------------+
| id           | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| org_id       | int(10) unsigned | YES  | MUL | NULL    |                |
| event_id     | int(10) unsigned | YES  | MUL | NULL    |                |
| post_code    | varchar(7)       | NO   | MUL | NULL    |                |
| address_1    | varchar(100)     | NO   |     | NULL    |                |
| address_2    | varchar(100)     | YES  |     | NULL    |                |
| town         | varchar(50)      | NO   |     | NULL    |                |
| county       | varchar(50)      | NO   |     | NULL    |                |
| email        | varchar(150)     | NO   |     | NULL    |                |
| phone        | int(11)          | YES  |     | NULL    |                |
| mobile       | int(11)          | YES  |     | NULL    |                |
| website_uri  | varchar(150)     | YES  |     | NULL    |                |
| facebook_uri | varchar(250)     | YES  |     | NULL    |                |
| twitter_uri  | varchar(250)     | YES  |     | NULL    |                |
+--------------+------------------+------+-----+---------+----------------+
14 rows in set (0.00 sec)
4

2 に答える 2

2
select o.Name, oAddress.PostCode, e.Name, eAddress.PostCode 
from cc_organisations o
inner join cc_addresses oAddress on oAddress.org_id = o.id
left outer join cc_events e on e.org_id=o.id
inner join cc_addresses eAddress on eAddress.event_id = e.id
于 2012-04-03T13:48:05.703 に答える
0
 SELECT cco.name as OrgName, cca.post_code as OrgPostCode, cce.id,
        cce.org_id, cce.name, cce.start_date, cce.end_date, cce.start_time,
        cce.end_time, cce.description
 FROM   cc_events cce, cc_addresses cca, cc_organisations cco
 WHERE  cca.event_id = cce.id AND cco.id=cce.org_id 
 ORDER BY cce.start_date
 LIMIT 50;

並べ替えと制限を変更できます。DBの大きさがわからないため、これらを追加しました...次の方法で解決できる場合もあります。

SELECT cco.name as OrgName, cca.post_code as OrgPostCode, cce.*
FROM cc_events cce, cc_addresses cca, cc_organisations cco
WHERE  cca.event_id = cce.id AND cco.id=cce.org_id
ORDER BY cce.start_date LIMIT 50;

しかし、2番目のクエリが失敗するかどうかは100%わかりません。

テーブルaddressには郵便番号が含まれています。ただし、組織IDとイベントIDの外部キーもあります。すべてのイベントは組織に属するためevent_id、テーブルから確認するだけで済みます。address

  • アドレスのイベントが一致したイベントID
  • イベントの組織が組織IDと一致しました
于 2012-04-03T13:48:13.213 に答える