Drupal に精通している場合、これは 2 つの分類用語を使用して各 content_type_event ノードを説明しています。Drupal を知らない場合でも、以下のすべてを利用できます。
引き出されたテーブルよりも簡単に追跡およびテストできるSQL Fiddleを作成しました。フィドルには、以下に示すサンプル情報とは少し異なる実際のデータベース コンテンツがありますが、できるだけ似たものにしようとしました。
私は3つのテーブルを持っています:
content_type_event:
____________________________________
| nid | field_eventstartdate_value |
------------------------------------
| 17 | 1984581600 |
| 18 | 1984581600 |
| 19 | 1984581600 |
| 20 | 1984581600 |
| 22 | 1984581600 |
====================================
term_node:
_____________
| nid | tid |
-------------
| 17 | 6 |
| 17 | 15 |
| 18 | 7 |
| 18 | 17 |
| 19 | 6 |
| 19 | 15 |
| 20 | 16 |
| 20 | 9 |
| 22 | 10 |
| 22 | 15 |
=============
用語_データ:
__________________________
| tid | vid | name |
--------------------------
| 6 | 4 | Location 1 |
| 15 | 3 | Event 1 |
| 7 | 4 | Location 2 |
| 9 | 4 | Location 3 |
| 10 | 4 | Location 4 |
| 16 | 3 | Event 2 |
| 17 | 3 | Event 3 |
==========================
テーブルにはイベントに関する情報が含まれていcontent_type_event
ますが、場所とイベントの種類については、さらに掘り下げる必要があります。
テーブルには、term_node
各 nid (ノード ID) に送られるすべての tid (用語 ID) が含まれています。各 nid には、イベント用に 2 つの tid が必要です。1 つの tid は場所を提供し、もう 1 つは event_type を使用します。
テーブルは tidのterm_node
名前を示し、この名前が event_type または場所であるかどうかを示す vid を示します。
私の目標は、すべてのイベントの nid、場所、event_type、field_eventstartdate_value を取得することです。次のすべては将来開始されるため、次のようになります。
______________________________________________________________
| nid | location | event_type | field_eventstartdate_value |
--------------------------------------------------------------
| 17 | Location 1 | Event 1 | 1984581600 |
| 18 | Location 2 | Event 3 | 1984581600 |
| 19 | Location 1 | Event 1 | 1984581600 |
| 20 | Location 3 | Event 2 | 1984581600 |
| 22 | Location 4 | Event 1 | 1984581600 |
==============================================================
私はSQLがあまり得意ではありません。これは私がこれまでに持っているものです:
SELECT event.nid, event.field_eventstartdate_value, location.name, event_type.name
FROM content_type_event AS event
JOIN term_node ON term_node.nid = event.nid
LEFT JOIN (
SELECT tid, name AS location FROM term_data WHERE vid = 4
) AS location ON location.tid = term_node.tid
LEFT JOIN (
SELECT tid, name AS location FROM term_data WHERE vid = 3
) AS event_type ON event_type.tid = term_node.tid;
しかし、これは私に与えます:
______________________________________________________________
| nid | location | event_type | field_eventstartdate_value |
--------------------------------------------------------------
| 17 | NULL | Event 1 | 1984581600 |
| 17 | Location 1 | NULL | 1984581600 |
| 18 | NULL | Event 3 | 1984581600 |
| 18 | Location 2 | NULL | 1984581600 |
| 19 | NULL | Event 1 | 1984581600 |
| 19 | Location 1 | NULL | 1984581600 |
| 20 | NULL | Event 2 | 1984581600 |
| 20 | Location 3 | NULL | 1984581600 |
| 22 | NULL | Event 1 | 1984581600 |
| 22 | Location 4 | NULL | 1984581600 |
==============================================================
これらの結果をグループ化できないように見えるので、部分的な情報を含む 2 つの行ではなく、イベントごとに完全な行を 1 つ取得します。
それらが必要な場合は、テーブル構築ステートメントを
フィドル: SQL フィドル。