我有一张这样的桌子:
id | user_id | param_id | param_value
1 1 44 google
2 1 45 adTest
3 1 46 Campaign
4 1 47 null
5 1 48 null
6 2 44 google
7 2 45 adAnotherTest
8 2 46 Campaign2
9 2 47 null
10 2 48 null
我想获取所有 user_ids where (param_id = 44 AND param_value=google) AND (param_id= 45 AND param_value = adTest) 。所以上面的 where 子句应该只给出 user_id = 1 而不是 user_id = 2 。他们都有 google 在 param_id 44 但只有用户 1 在 param_id = 45 有 param_value adTest。
问题是未来可以添加更多参数。我需要找到一个动态查询。这是我尝试过的:
SELECT DISTINCT up.user_id FROM user_params AS up
LEFT JOIN user_params AS upp ON up.id = upp.id
WHERE up.param_id IN (?,?)
AND upp.param_value IN (?,?)