我有三張表,我想要INNER JOIN
,因此我也有一些用戶輸入的條件。這些表(簡化的)如下: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
我需要與幾個用戶輸入值來獲取的節點,首先@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
,則field_max_hours_value
將包含0
,並且它們組合表示該節點只有一個可能的持續時間。
我想是這樣的查詢underneith,而造成的錯誤,但我認爲它確實說明了有些什麼,我需要做的。我想獲取@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
謝謝了,很遺憾,我已經嘗試過這種方式,就像一個小時前一樣。看到你的例子,我注意到我是用'!='代替' - condition'代替'='來做的。謝謝,我用你寫的這個斧頭,也感謝你的叫醒。現在是週末的時間了......)再次感謝! – Ambidex
是的,我會在週末節省一些'感謝':D – gaborsch