こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

mysql

$sql='SELECT id,kaisyamei, max(day),namae FROM message WHERE memberid=? GROUP BY id LIMIT '.$limit.' OFFSET '.$offset;


どこか違いますか?

投稿日時 - 2016-03-07 18:52:55

QNo.9139451

困ってます

質問者が選んだベストアンサー

>名前はすべて同じで
同じならmaxかminでいいです。

投稿日時 - 2016-03-08 02:21:11

お礼

ありがとうございました。!!

投稿日時 - 2016-03-08 10:06:14

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

GROUP BY id, kaisyamei, namae
にしちゃえば。

投稿日時 - 2016-03-08 09:41:07

お礼

少し理解できない部分もありmysqlカテゴリでまた詳しく質問させていただきました よろしくお願いいたします。

投稿日時 - 2016-03-08 10:07:28

ANo.2

>具体的にはどのようなSQL文になるのでしょうか。
>サンプルコードなど教えていただけましたら幸いです

回答したように、同じid LIMITの行を1行にするために
max(day)   dayは最大値を持ってくる、とか
min(day) dayは最小値を持ってくる、 とか
ave(tensuu) tensuuは平均を持ってくる、 などの操作をしなければなりません。

投稿日時 - 2016-03-07 22:03:39

お礼

よく考えるとおっしゃるどおりです。
データに入っている 名前はすべて同じで新しいとかに関係ないのですがどのようなsqlになるのでしょうか?
 AVGのようにグループの合計を求めるわけでもございません。
max dayのように新しい日をもとめるわけでもないので
無知で申し訳ないですがお願いいたします。

投稿日時 - 2016-03-08 00:05:33

ANo.1

id,LIMITでグループを作るのですから、
kaisyameiとnamae は書いてはなりません。

id,LIMITで1行にするのです。
複数行ある同じid,LIMITに対してどの行のkaisyameiとnamaeを持ってくるのか
明示しなければなりません。

投稿日時 - 2016-03-07 19:53:19

補足

申し訳ありません
$sql='SELECT COUNT(*) FROM message WHERE sateisyaid=? GROUP BY id';
のsateisyaid=?部分はmemberid=?
$data[]=$sateisyaidもmemberidの間違えです

投稿日時 - 2016-03-07 21:40:47

お礼

$page = 1;
$limit = 5;
$offset = $limit * ($page - 1);
$sql='SELECT COUNT(*) FROM message WHERE sateisyaid=? GROUP BY id';
$stmt=$dbh->prepare($sql);
$data[]=$sateisyaid;
$total=$stmt->fetchColumn();
$lastpage= ceil($total/$limit);

$sql='SELECT id,kaisyamei, max(day),namae FROM message WHERE memberid=? GROUP BY id LIMIT '.$limit.' OFFSET '.$offset;

ソースはこんな感じなのですが

具体的にはどのようなSQL文になるのでしょうか。
サンプルコードなど教えていただけましたら幸いです

投稿日時 - 2016-03-07 21:38:37

あなたにオススメの質問