我有一张类似这样的表:
样品
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。
答案 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';