sql select查询无法使用join工作

时间:2018-02-07 11:21:56

标签: mysql mysqli

我的帖子表单有自定义字段。所有事情都很完美,但在搜索结果页面上,当我想用​​自定义字段搜索时,“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这就是错误

希望你明白我的需要

1 个答案:

答案 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
            )
        )

我希望,我可以提供任何帮助。