我有三个我想要的表INNER JOIN
,因此我也有一些用户输入作为条件。表格(简化)如下:
# Table: node
- nid
- title
#Table: field_min_hours_value
- entity_id (corresponds to node.nid)
- field_min_hours_value
#Table: field_max_hours_value
- entity_id (corresponds to node.nid)
- field_max_hours_value
@max
我需要使用一些用户输入值来获取节点,首先是@min
小时,它们的值都可以在-1
和之间40
。当设置为一个时,-1
它应该被忽略并且不被使用。
一个节点可以同时填充field_min_hours_value
和field_max_hours_value
值,然后表明它可以在field_min_hours_value
和field_max_hours_value
小时之间变化。
如果field_min_hours_value
设置了 only,那么field_max_hours_value
将包含0
并组合它们表示该节点只有一个可能的持续时间。
我尝试了类似下面的查询,但会产生错误,但我认为它确实说明了我需要做的事情。我想获取 和 之间的所有节点@min
,@max
但也想考虑这些值中的一个或两个可以为空(-1
),然后我需要所有节点。
SELECT n.nid, n.title, min.field_min_hours_value, max.field_max_hours_value
FROM node n
INNER JOIN field_data_field_max_hours max
ON n.nid = max.entity_id
INNER JOIN field_data_field_min_hours min
ON n.nid = min.entity_id
# Use the min value
IF @min != -1 THEN
WHERE
max.field_max_hours_value >= @min
OR (max.field_max_hours_value = 0 AND min.field_min_hours_value >= @min) # Needed for when there is no max_hours set in the node
END IF
# Use the max value
IF @max != -1 THEN
AND
# Use the max value
(min.field_min_hours_value <= @max)
END IF