从请求中收到多个参数:
- 域
- GEO
- 引用者
- 其他参数
数据库表看起来像这样:
domain | geo | referer | utm | option_id |
---------|--------|---------|-----|-----------|
test.com | | | | 1
test.com | us | | | 2
test.com | us | ref.com | 12 | 3
test2.com| us | | | 4
例如,我收到了一些使用params的请求:
domain=test.com
geo=us
referer=ref.com
utm=12
如果我查询:
select option_id from table where domain='test.com' and geo='us' and referer='ref.com' and utm='12';
它只给我完整的匹配结果option_id = 3
但我需要获得所有选项,以及与域名和地理位置的每场比赛
option_id = [1,2,3]
如何以高效的方式解决问题,也许解决方案不是SQL数据库。我需要实时搜索highload系统。 帮助将非常有用,谢谢。
满足选择的查询将是:
select option_id from table where domain='test.com' and geo='' and referer='' and utm=''
UNION
select option_id from table where domain='test.com' and geo='us' and referer='' and utm=''
UNION
select option_id from table where domain='test.com' and geo='us' and referer='ref.com' and utm='12'
但它很慢,我知道存在简单且高效的解决方案。也许没有SQL数据库
答案 0 :(得分:0)
如果你想获得与至少一个参数匹配的所有选项,你应该使用OR代替AND
select option_id from table where ( domain='test.com' OR geo='us' OR referer='ref.com' OR utm='12' );
答案 1 :(得分:0)
select option_id from table where domain LIKE '%test.com%' and geo LIKE '%us%' and referer LIKE '%ref.com%' and utm like '%12%';
我没有测试此代码,但您必须使用like,它将使用模式搜索组件。