我的帖子表单有自定义字段。所有事情都很完美,但在搜索结果页面上,当我想用自定义字段搜索时,“AND oprater”中存在一些问题。 我不明白为什么我的查询给出0结果。
我的查询:
SELECT DISTINCT p.*
FROM `ad_product` AS p
JOIN `ad_custom_data` AS c ON c.product_id = p.id
WHERE STATUS = 'active'
AND ((c.field_id = '1'
AND CASE
WHEN (c.field_type = 'text-field')
THEN c.field_data LIKE '%BMW%'
ELSE c.field_data = 'BMW'
END
)
AND (c.field_id = '7'
AND CASE
WHEN (c.field_type = 'text-field')
THEN c.field_data LIKE '%3%'
ELSE c.field_data = '3'
END
)
)
有人可以帮助解释为什么我的查询不正确吗?
Custom_data表结构
id product_id field_id field_type field_data
1 1 1 text-field BMW
2 1 2 radio-buttons 3
3 2 1 text-field Audi
4 2 2 radio-buttons 3
我想要严格的搜索
示例:用户搜索 text field = BMW和radio checked value = 3 然后我只想选择product_id = 1行。
但是在这个查询中,我得到了product_id 1,2这就是错误
希望你明白我的需要
答案 0 :(得分:0)
我真的不明白这是做什么的,但我认为,在OR
开头的两个复杂条件之间,您需要AND
而不是c.field_id = [...]
。
这样的事情:
SELECT DISTINCT p.*
FROM `ad_product` AS p
JOIN `ad_custom_data` AS c ON c.product_id = p.id
WHERE STATUS = 'active'
AND p.category = '1'
AND p.country = 'IN'
AND ((c.field_id = '1'
AND CASE
WHEN (c.field_type = 'text-field' OR c.field_type = 'textarea')
THEN c.field_data LIKE '%Maruti%'
ELSE c.field_data = 'Maruti'
END
)
OR (c.field_id = '7'
AND CASE
WHEN (c.field_type = 'text-field' OR c.field_type = 'textarea')
THEN c.field_data LIKE '%3%'
ELSE c.field_data = '3'
END
)
)
我希望,我可以提供任何帮助。