アプリ版:「スタンプのみでお礼する」機能のリリースについて

度々お世話になってます。

table1
【ID|フィールド1】
[1|AAA]
[1|BBB]
[2|CCC]
[3|DDD]
[3|EEE]
[3|FFF]
というようなテーブルがあるとして、クエリでは
<table>
<tr><td>1</td><td>AAA<br>BBB</td></tr>
<tr><td>2</td><td>CCC</td></tr>
<tr><td>3</td><td>DDD<br>EEE<br>FFF</td></tr>
</table>
…という形で表示したいのです。(理想です)

今までいろいろ試してみて、
$sql = " SELECT ID,フィールド FROM table1 GROUP BY ID ";
に行き着きましたが、これだと
<table>
<tr><td>1</td><td>AAA</td></tr>
<tr><td>2</td><td>CCC</td></tr>
<tr><td>3</td><td>DDD</td></tr>
</table>
というように表示され、表示されないレコードが出来てしまいます。
GROUP BYが余計!と言われそうですが、同じIDが複数並ぶのを避けたいのです。

ソースコードは、
print "<table>\n";
print "<tr><th>ID</th><th>フィールド</th></tr>\n";
 while( $row = mysql_fetch_array($result) ) {
 print "<tr><td>$row[ID]</td><td>$row[フィールド]</td></tr>\n";
 }
print "</table>\n";
になっている状態です。
$row[フィールド]を書き換えればいいのかな?と思いますが、検索してもそれらしいものは見当たらなかったので質問させていただきました。
心当たりのある方、よろしくおねがいします。

A 回答 (2件)

SQLはGROUP BYなしで普通に取得


あとはテーブルを書き出すときにちょい工夫を

$query = mysql_query($sql);
$rows = array();

//同じIDのDB行を配列にまとめます
while ($row = mysql_fetch_assoc($query))
{
  if ( !isset( $rows[$row['ID']] ) ) {
    $rows[$row['ID']] = array();
  }
  $rows[$row['ID']][] = $row;
}

print_r($rows);//1回中身を確認すると勉強になると思います。

//テーブル書き出し
print "<table>\n";
print "<tr><th>ID</th><th>フィールド</th></tr>\n";
foreach ($rows as $id => $row)
{
  print '<tr><td>'.$id.'</td><td>'.implode('<br>', $row).'</td></tr>'."\n";
}
print "</table>\n";

この回答への補足

返事が遅れて申し訳ありません。
自分のデータに当てはめてみましたが、'.implode('<br>', $row).'の部分が全て
Array
と表示されてしまいます。(複数のデータがあるべきレコードでも、1行でArrayになっています)

自分がおかしなことをしているだけかもしれませんが、一応意見をお聞きしたいです。お願いします。

補足日時:2007/12/12 00:22
    • good
    • 0

ですよね


ごめんなさい

implode('<br>', $row)
の$rowも2次元の配列になっちゃっているので
以下を修正

while ($row = mysql_fetch_assoc($query))
{
  if ( !isset( $rows[$row['ID']] ) ) {
    $rows[$row['ID']] = array();
  }
  //ここに表示するデータを文字列として入れる。
  $rows[$row['ID']][] = $row['表示するフィールド名'];
}


でどうでしょうか。。
    • good
    • 0
この回答へのお礼

早速ご返答ありがとうございます。本当に助かります。
無事、理想の形に成りました。
今後のためにもこの文法の意味(?)もきちんと勉強しておこうと思います。

お礼日時:2007/12/12 13:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!