有一个通讯表,其中包含内容ID和相应的键。有必要组织快速搜索按键过滤。如果键的值等于null,则接近任何内容。例如,如果帖子查询到来 $ _POST == array(filter1 => 2,filter2 => 4,filter3 => 2,filter4 => null),然后结果将是数组(content_ids = >数组(4,7))
id | content_id |过滤器1 | filter2 | filter3 |过滤器4
1 | 1 | 1 | 3 | 1 | NULL
2 | 2 | 2 | 6 | 2 | 2
3 | 3 | 1 | 5 | 1 | NULL
4 | 5 | 1 | 1 | 1 | 5
5 | 4 | 2 | 4 | 2 | 7
6 | 6 | 2 | 2 | 2 | NULL
7 | 7 | 2 | 4 | NULL | NULL
PS:该表格将包含数千行,过滤器数量将等于12
答案 0 :(得分:0)
恕我直言,问题更多的是关于SQL而不是Codeigniter。
您可以做的是构建看起来像
的查询SELECT content_id
FROM table1
WHERE (? IS NULL OR filter1 = ? OR filter1 IS NULL)
AND (? IS NULL OR filter2 = ? OR filter2 IS NULL)
AND (? IS NULL OR filter3 = ? OR filter3 IS NULL)
AND (? IS NULL OR filter4 = ? OR filter4 IS NULL)
其中?
是占位符,表示您通过POST
获得的实际过滤值。
使用您的样本数据输出:
| CONTENT_ID | |------------| | 4 | | 7 |
这是 SQLFiddle 演示
考虑到性能原因,请考虑创建覆盖索引(取决于实际的数据访问模式)。