我有以下MySQL声明
SELECT * FROM node
LEFT JOIN field_data_field_featured ON field_data_field_featured.entity_id = node.nid
LEFT JOIN field_data_field_mobile_only ON field_data_field_mobile_only.entity_id = node.nid AND field_data_field_mobile_only.field_mobile_only_value = 1
INNER JOIN field_data_field_related_show ON field_data_field_related_show.entity_id = node.nid
WHERE node.status = '1' AND (node.type IN ('game','video','post'))
AND field_related_show_nid = 64
ORDER BY field_featured_value DESC, node.created DESC
它当前返回符合所述条件的所有记录,但我想添加一个条件语句,如果字段类型是游戏,我只想在字段field_mobile_only_value为1时将记录包含在结果集中。
当前SQL的示例记录如下所示
nid: 351
vid: 351
type: game
language: und
title: Avalanche at Plankton's Peak
uid: 53
status: 1
created: 1403730218
changed: 1403730218
comment: 0
promote: 1
sticky: 0
tnid: 0
translate: 0
entity_type: node
bundle: game
deleted: 0
entity_id: 351
revision_id: 351
language: und
delta: 0
field_featured_value: 0
entity_type: NULL
bundle: NULL
deleted: NULL
entity_id: NULL
revision_id: NULL
language: NULL
delta: NULL
field_mobile_only_value: NULL
entity_type: node
bundle: game
deleted: 0
entity_id: 351
revision_id: 351
language: und
delta: 0
field_related_show_nid: 64
答案 0 :(得分:0)
我认为您不能根据选择查询中其他列的值为结果添加列。
为什么不在PHP代码中验证这一点?
如果不是游戏,只需忽略field_mobile_only_value
列。
答案 1 :(得分:0)
您可以在WHERE
子句中添加类似的内容:
AND ( ( node.type = 'game'
AND field_data_field_mobile_only.field_mobile_only_value = 1
)
OR node.type <> 'game'
)
(我们可以在这里使用不等式运算符,而不关心NULL值,因为先前的谓词已经保证node.type
的值不会为NULL。)
如果type
为'game'
,那么我们只返回行,如果等于1
。
否则,如果type
不是game
,我们允许返回该行。
在更一般的情况下,我们还希望返回NULL
值为type
的行,使用空安全比较器稍作修改:
AND ( ( node.type = 'game'
AND field_data_field_mobile_only.field_mobile_only_value = 1
)
OR NOT ( node.type <=> 'game' )
)
会给出相同的结果。