使用codeigniter从数据库中获取数据的最快方法

时间:2014-12-01 03:43:45

标签: php codeigniter filter fetch

有一个通讯表,其中包含内容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

1 个答案:

答案 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 演示

考虑到性能原因,请考虑创建覆盖索引(取决于实际的数据访问模式)。