如果您熟悉 Drupal,这将使用 2 个分类术语来描述每个 content_type_event 节点。如果您不了解 Drupal,您仍然拥有以下所有内容。
我已经构建了一个SQL Fiddle,它比我绘制的表格更容易遵循和测试。小提琴的实际数据库内容与下面显示的示例信息略有不同,但我试图使它们尽可能相似。
我有三张桌子:
内容类型事件:
____________________________________
| nid | field_eventstartdate_value |
------------------------------------
| 17 | 1984581600 |
| 18 | 1984581600 |
| 19 | 1984581600 |
| 20 | 1984581600 |
| 22 | 1984581600 |
====================================
术语节点:
_____________
| 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
表包含所有 tid(术语 id)到每个 nid(节点 id)。每个 nid 应该有 2 个 tid 用于我们的事件。一个 tid 将为我们提供我们的位置,另一个将使用我们的 event_type。
该term_node
表给出了 tid 的名称,并为我们提供了一个 vid,告诉我们这个名称是 event_type 还是 location。
我的目标是获取所有事件的 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 行。
如果你想要它们,你可以从
小提琴:SQL 小提琴。