2017-02-01 11 views
0

この質問を投稿する前に、多くの思考プロセスが行われました。私の問題を簡単な形式で説明しようとしています。codeigniterに縦テーブルの60000以上の行を含むレポートを作成する。改ページする方法?

私のmySQLテーブルには2つのテーブルがあり、そのうちの1つはユーザであり、もう1つはそのユーザに関連する質問と回答です。

簡体例:

ユーザー

| id | name | registered_on  | 
|----|--------|---------------------| 
| 1 | Aaron | 2017-02-01 00:01:02 | 
| 2 | Baron | 2017-02-01 01:01:02 | 
| 3 | Chiron | 2017-02-01 02:01:02 | 

解答

| id | user_id | keyword | value | created_on   | 
|----|---------|---------|---------|---------------------| 
| 1 | 1  | gender | Male | 2017-02-01 00:01:02 | 
| 2 | 1  | age  | 24  | 2017-02-01 00:01:02 | 
| 3 | 2  | gender | Male | 2017-02-01 00:01:02 | 
| 4 | 2  | age  | Unknown | 2017-02-01 00:01:02 | 
| 5 | 3  | gender | God  | 2017-02-01 00:01:02 | 

私は上記の関係が明らかであると思います。

  • プリペアドステートメント(CodeIgniterのがないので使用できません:だから私は達成したいことは、私の研究が示唆するように、これは以下の方法で行うことができます。この

    | 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 | 
    

    のようなCSV形式のレポートを作成することです複雑な感じ)

  • 私がいないその他のより良い方法! - サポート)
  • ページングは​​、(垂直のテーブルには問題)
  • MySQLのピボットテーブル(ただし、動的な列名であります知っている

私はページングを考えていますが、それはどのように垂直テーブルの場合に使用される を理解することです。あなたの誰かが同じ問題に直面していたり​​、いくつか意味のある提案をしているのなら、私はそれが欲しいです!どんな助けもありがとう!

+0

ページネーションのためのCIのマニュアルを見ていない理由:

まず、あなたがあなたの答えテーブル内のすべての異なる鍵を選択することができます(select distinct keyword...) その後、でクエリを作成するには、検索結果の上にルーピング加入しますか? https://codeigniter.com/user_guide/libraries/pagination.html – Kisaragi

+0

この1つのレポートでは、[php memory limitを上げる](http://stackoverflow.com/a/22283701/3585500)や[PDOを使う]と準備されたステートメント](http://stackoverflow.com/a/31098651/3585500)を参照してください。 – ourmandave

+0

https://www.codeigniter.com/user_guide/database/results.html?highlight=unbuffered_row#CI_DB_result::unbuffered_row – sintakonte

答えて

0

あなたの問題がよく分かっている場合は、回答キーを列として使用できるすべてのユーザー情報を含む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(); 
+0

良い提案です。しかし、私が言ったように、私はテーブルに約60000行を持っていて、その多くのデータがCodeIgniterのデータベースドライバのメモリを使い果たしてしまっています。だから、私はかなりページングが私の唯一の方法だと思っています。私はすでにあなたが提案したことをやっています:P – Arcanyx

+0

問題はクエリ自体から来ているのか分かりません。メモリ制限は、CSVファイルを生成するときに必要です。あなたはその部分をどのように処理しますか? – VeZoul

+0

'致命的なエラー:134行目の/var/www/html/secretprojectuwouldntwannaknow/system/database/drivers/mysqli/mysqli_result.php 168行目で134217728バイトのメモリサイズが使い果たされました(256バイトの割り当てを試みました) - 私のデータです対処方法は上記の簡略化された例より多くの列があります。 – Arcanyx

関連する問題