【问题标题】:The fastest way to fetch data from the database using codeigniter使用 codeigniter 从数据库中获取数据的最快方法
【发布时间】:2014-12-01 03:43:44
【问题描述】:

有一个通信表,其中包含内容的 ID 和相应的密钥。有必要在键中组织快速搜索以进行过滤。如果键的值等于 null,则接近任何内容。例如,如果帖子查询来了 $ _POST == array (filter1 => 2, filter2 => 4, filter3 => 2, filter4 => null),那么结果就是array(content_ids => array(4 , 7))

标识 |内容标识 |过滤器1|过滤器2 |过滤器3 |过滤器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

【问题讨论】:

  • 发布你尝试过的查询,你觉得它很慢。

标签: php codeigniter filter fetch


【解决方案1】:

恕我直言,问题更多是关于 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 获得的实际过滤器值的占位符。

输出样本数据:

|内容 ID | |------------| | 4 | | 7 |

这里是SQLFiddle演示

出于性能原因,考虑创建一个或多个覆盖索引(取决于实际数据访问模式)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 2011-04-07
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多