如果您熟悉Drupal,则使用2个分类术语来描述每个content_type_event节点。如果您不了解Drupal,您仍然可以在下面找到所有内容。
我构建了一个SQL Fiddle,它比我绘制的表更易于遵循和测试。小提琴的实际数据库内容与下面显示的样本信息有些不同,但是我尝试使它们尽可能相似。
我有三个表:
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 |
=============
term_data:
__________________________
| 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个提示。一个提示会给我们我们的位置,另一个提示会给我们使用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 |
==============================================================
我似乎无法将这些结果分组在一起,所以每个事件只能得到一整行,而不是包含部分信息的两行。
如果需要它们,可以从中获取表build语句。
内容:SQL Fiddle。
我认为您需要这样做:
SELECT
event.nid,
location.location,
event_type.event_type,
event.field_eventstartdate_value
FROM
content_type_event AS event
LEFT OUTER JOIN (
SELECT
nid,
name AS location
FROM
term_data JOIN
term_node ON term_data.tid=term_node.tid
WHERE term_data.vid = 4) AS location ON location.nid = event.nid
LEFT OUTER JOIN (
SELECT
nid,
name AS event_type
FROM
term_data JOIN
term_node ON term_data.tid = term_node.tid
WHERE term_data.vid = 3) AS event_type ON event_type.nid = event.nid;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句