나는 INNER JOIN
으로 3 개의 테이블을 가지므로 조건으로 일부 사용자 입력도 있습니다. 표는 다음과 같이 (간체)됩니다 무엇보다도 @max
및 @min
시간을 먼저MySQL : 조건부 WHERE 블록
# 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
내가 몇 사용자 입력 값으로 노드를 가져올 필요가 있고, 이들은 모두 -1
과 40
사이의 값을 가질 수 있습니다. 하나를 -1
으로 설정하면이 값을 무시하고 사용해야합니다.
노드는 field_min_hours_value
및 field_max_hours_value
값을 모두 채울 수 있으며 field_min_hours_value
과 field_max_hours_value
시간 사이에 달라질 수 있음을 나타냅니다.
field_min_hours_value
만 설정되어있는 경우 은 0
을 포함하며이 노드는 하나의 가능한 기간 만 가질 수 있음을 나타냅니다.
나는 underneith라는 쿼리와 같은 것을 시도했지만 에러를 만들어 냈지만, 내가해야 할 일을 다소 설명해 준다고 생각한다. @min
과 @max
사이의 모든 노드를 가져오고 싶지만 이러한 값 중 하나 또는 둘 모두가 비어있을 수 있으므로 (모든 노드가 필요함) 고려해야합니다. 에서
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
감사합니다. 슬프게도 한 시간 전에 거의 같은 형식으로 시도했습니다. 당신의 예제를 보았을 때, 나는'= '대신에 "-1 condition"을 위해'! ='를 사용하여 그것을 한 것으로 나타났습니다. 고마워, 나는 당신이 작성한대로이 axactly 사용하고 또한 전화 주셔서 감사합니다. 이제 주말을위한 시간입니다 ...;) 다시 한번 감사드립니다! – Ambidex
그래, 나는 주말 동안 '감사'를 구할 것이다. D – gaborsch