私はcodeigniterを新しくしましたが(これは排他的なCIの質問ではないと思いますが)、IDで結合された2つのテーブルからデータを選択するモデルのメソッドを持っています。 1(tblclients)は次のようになります複数の行をロールアップするためのより洗練された方法ですか?
表:私はのために1行に参加したデータを 'ロールアップ' したい
+----+------------+
+ id + s_date +
+----+------------+
+ 1 + 27/01/12 +
+ 1 + 15/02/12 +
+ 1 + 18/02/12 +
+ 2 + 03/01/12 +
+ 2 + 11/02/12 +
+ 2 + 15/02/12 +
+ 3 + 01/01/12 +
+ 3 + 19/02/12 +
+----+------------+
:
+----+------------+
+ id + c_name +
+----+------------+
+ 1 + Joe Bloggs +
+ 2 + Jim Bloggs +
+ 3 + Tim Bloggs +
+----+------------+
表2(tblstars)このようになります
+----+------------+--------------------------------+
+ id + Name + Dates +
+----+------------+--------------------------------+
+ 1 + Joe Bloggs + 27/01/12 15/02/12 18/02/12 +
+ 2 + Jim Bloggs + 03/01/12 11/02/12 15/02/12 +
+ 3 + Tim Bloggs + 01/01/12 19/02/12 +
+----+------------+--------------------------------+
今、私は次のiを使って問題を解決しました。 nは私のモデル:
function get_clients_concat()
{
$query = $this->db
->select('tblclients.id, tblclients.c_name, GROUP_CONCAT(tblstars.s_date SEPARATOR "#") AS star_dates', NULL, FALSE)
->join('tblstars', 'tblstars.id = tblclients.id', 'left')
->order_by('tblclients.id')
->group_by('tblclients.id')
->get('tblclients');
return $query->result();
}
、その後、私の見解では(GROUP_CONCATによって作成された)配列を爆発し、そこにいくつかの処理を行って...しかし、それは本当に不格好ようです。
よりよい解決策はありますか?
私はこれで間違って何も表示されません。代わりに、 'GROUP_CONCAT'を使用しないで、PHPが反復で' id'がいつ変化するかを調べることができます。応答のために – Mischa
ありがとう。私は多分、私は、どこかに 'ロールアップ'部分でトリックを発行したが、そうではないようだ。乾杯。 – user1106252
ようこそ。私はそれがまたあなたのデータセットのサイズに依存すると思います。おそらく 'GROUP_CONCAT'を使用するとパフォーマンスが低下することがあります。私はMySQLの専門家ではありません。質問にMySQLタグを追加すると、そのことに関するフィードバックを得ることができます。また、PHPタグを追加するとさらにフィードバックを得ることができます。 – Mischa