使用mysql

时间:2015-11-19 19:46:32

标签: mysql

我有一张类似这样的表:

样品

sample_id  | field    | value  | list_id
1            country    US       10
2            state      tx       10
3            country    US       11
4            state      tx       11
5            emp_size   100      11

我有一个查询,使用ff代码检索list_ids 10和11;

select * from samples where (field='country' and value='US') OR (field='state' and value='tx')

但后来我意识到这不是我想要的设置。假设我在我的子句中包含(field ='emp_size'和value ='100'),因为我只想获得list_id 11,它仍然包含list_id 10,因为我在查询中使用了OR。而且现在我不确定是否只有使用普通mysql的解决方法,或者我应该使用php操作数据。

修改

为了澄清,我想根据给定的参数获取list_ids,比如说,我想要US和TX,它应该返回list_ids 10和11.但是如果我添加另一个参数,比如emp_size,它应该只返回list_id 11。

1 个答案:

答案 0 :(得分:1)

你有一个EAV样式的数据结构,所以这里最好的解决方案是为你正在搜索的每个参数/值组合自联接表。

SELECT s1.list_id
    FROM samples s1
        INNER JOIN samples s2
            ON s1.list_id = s2.list_id
                AND s2.field = 'state'
                AND s2.value = 'tx'
        INNER JOIN samples s3
            ON s1.list_id = s3.list_id
                AND s3.field = 'emp_size'
                AND s3.value = '100'
    WHERE s1.field = 'country'
        AND s1.value = 'US';