Php 在codeigniter中创建包含60000多行垂直表的报告。如何分页?

Php 在codeigniter中创建包含60000多行垂直表的报告。如何分页?,php,mysql,codeigniter,Php,Mysql,Codeigniter,在我决定发布这个问题之前,经过了很多思考。试图用一种简化的方式解释我的问题 我的mySQL表中有两个表,一个是用户,另一个是与该用户相关的问题和答案 简化示例: 使用者 应答键 我希望上述关系是明确的。所以我希望实现的是创建一个像这样的CSV报告 | name | gender | age | registered_on | |--------|--------|---------|---------------------| | Aaron | Male | 24

在我决定发布这个问题之前,经过了很多思考。试图用一种简化的方式解释我的问题

我的mySQL表中有两个表,一个是用户,另一个是与该用户相关的问题和答案

简化示例:

使用者

应答键

我希望上述关系是明确的。所以我希望实现的是创建一个像这样的CSV报告

| name   | gender | age     | registered_on       |
|--------|--------|---------|---------------------|
| Aaron  | Male   | 24      | 2017-02-01 00:01:02 |
| Baron  | Male   | Unknown | 2017-02-01 01:01:02 |
| Chiron | God    | NULL    | 2017-02-01 02:01:02 |
我的研究表明,这可以通过以下方式实现:

准备好的语句无法使用,因为CodeIgniter不支持 分页垂直表是个问题 MySQL Pivot表,但具有动态列名-感觉很复杂! 还有其他我不知道的更好的方法吗 我正在考虑分页,但还没有弄清楚它是如何实现的
用于垂直桌子的情况。我希望你们中的任何一个人都遇到过同样的问题,或者有一些有意义的建议!感谢您的帮助

如果我很了解您的问题,您想要一个CSV文件,其中包含所有可用的用户信息,并使用答案键作为列

为什么不使用2个查询来执行此操作

首先,您可以在您的答案表中选择所有不同的关键字选择不同的关键字。。。 然后,创建查询,并在结果上循环连接:

$this->db->select('u.id, u.name, u.registered_on');
$this->db->from('users u');
foreach($keywords as $i_key => $s_keyword){
    $this->db->join('answers_table at'.$i_key, 'at'.$i_key.'.user_id = u.id', 'left');
    $this->db->select('at'.$i_key.'.value as '.$s_keyword);
}
$a_users = $this->db->get()->result();

这是一个很好的建议。然而,正如我所说,我的表中有大约60000行,处理这么多数据会耗尽CodeIgniter数据库驱动程序中的内存。所以我认为寻呼是我唯一的出路。。我已经在做你建议的事情了:P不确定问题来自于查询本身。生成CSV文件时,内存限制必须为。如何处理该部分?致命错误:允许内存大小为134217728字节的内存已耗尽试图在第168行的/var/www/html/secretprojectuwouldntwannaware/system/database/drivers/mysqli/mysqli_result.php中分配256字节-我正在处理的数据比上述简化示例中的列更多…在这种情况下,也许先做一个计数,然后将这个计数除以5000,然后用$this->db->limit循环这个时间,谢谢你的建议,现在就试试吧!为什么不看看CI的文档进行分页呢?对于这一份报告,您可以尝试或通过。@Kisaragi-由于我正在生成一份CSV报告,因此无法分页。@ourmandave-启动内存是我的最后一个选项-因为我正专注于应用程序的优化。PDO看起来不错,我们会调查的
| name   | gender | age     | registered_on       |
|--------|--------|---------|---------------------|
| Aaron  | Male   | 24      | 2017-02-01 00:01:02 |
| Baron  | Male   | Unknown | 2017-02-01 01:01:02 |
| Chiron | God    | NULL    | 2017-02-01 02:01:02 |
$this->db->select('u.id, u.name, u.registered_on');
$this->db->from('users u');
foreach($keywords as $i_key => $s_keyword){
    $this->db->join('answers_table at'.$i_key, 'at'.$i_key.'.user_id = u.id', 'left');
    $this->db->select('at'.$i_key.'.value as '.$s_keyword);
}
$a_users = $this->db->get()->result();