映画のエンドロール観る派?観ない派?

MySQLに接続して、下記のようにデータ(id,名前, 時間)を新しい順に $rows = $stmt->fetchAll(); で取得しているときに、

Array
(
[0] => Array
(
[id] => 8
[name] => 山田
[time] => 2016-05-03 17:25:36
)
[1] => Array
(
[id] => 9
[name] => 田中
[time] => 2016-05-03 17:25:28
)

[2] => Array
(
[id] => 8
[name] => 山田
[time] => 2016-05-03 17:24:16
)

[3] => Array
(
[id] => 9
[name] => 田中
[time] => 2016-05-03 17:24:06
)

[4] => Array
(
[id] => 200
[name] => 西野
[time] => 2016-05-03 17:20:21
)

[5] => Array
(
[id] => 10
[name] => 武田
[time] => 2016-05-03 17:02:30
)

)

HTMLで下記のように出力します。

<ul>
<?php foreach ($rows as $row) { ?>
<li> <php ehco $row['id']; ?> "> <?php echo $row['name']; ?> </li>
<?php } ?>
</ul>

↑ ただこの場合は、

・8 山田
・9 田中
・8 山田
・9 田中
・200 西野
・10 武田

と表示されます。
8 山田 と 9田中は 2回登場するので、同じidが複数登場する場合は、時間が新しい方の行だけのこして、古いほうを非表示にしたいのですがどうすればよいでしょうか?

array unique()関数で粘ってみたのですが、やり方がまずいのか、できなかったので、教えてください。または、他のやり方もあるかもしれません。よろしくお願いします。

A 回答 (1件)

普通はsql側でidでgroup by してmax(time)で最新時間を


取得します
    • good
    • 0
この回答へのお礼

ありがとうこざいます。order by と group byの組み合わせで取得することしか思っていなかったので、max()は意外な発見でした。感謝です。
SQLの関数や操作が複雑になってくるとかなり苦手なので、こちらの方を練習していきたいと思います。

お礼日時:2016/05/04 21:30

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