- ベストアンサー
mysql
$sql='SELECT id,kaisyamei, max(day),namae FROM message WHERE memberid=? GROUP BY id LIMIT '.$limit.' OFFSET '.$offset; どこか違いますか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>名前はすべて同じで 同じならmaxかminでいいです。
その他の回答 (3)
- t_ohta
- ベストアンサー率38% (5238/13705)
GROUP BY id, kaisyamei, namae にしちゃえば。
お礼
少し理解できない部分もありmysqlカテゴリでまた詳しく質問させていただきました よろしくお願いいたします。
- maiko0333
- ベストアンサー率19% (839/4401)
>具体的にはどのようなSQL文になるのでしょうか。 >サンプルコードなど教えていただけましたら幸いです 回答したように、同じid LIMITの行を1行にするために max(day) dayは最大値を持ってくる、とか min(day) dayは最小値を持ってくる、 とか ave(tensuu) tensuuは平均を持ってくる、 などの操作をしなければなりません。
お礼
よく考えるとおっしゃるどおりです。 データに入っている 名前はすべて同じで新しいとかに関係ないのですがどのようなsqlになるのでしょうか? AVGのようにグループの合計を求めるわけでもございません。 max dayのように新しい日をもとめるわけでもないので 無知で申し訳ないですがお願いいたします。
- maiko0333
- ベストアンサー率19% (839/4401)
id,LIMITでグループを作るのですから、 kaisyameiとnamae は書いてはなりません。 id,LIMITで1行にするのです。 複数行ある同じid,LIMITに対してどの行のkaisyameiとnamaeを持ってくるのか 明示しなければなりません。
お礼
$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文になるのでしょうか。 サンプルコードなど教えていただけましたら幸いです
補足
申し訳ありません $sql='SELECT COUNT(*) FROM message WHERE sateisyaid=? GROUP BY id'; のsateisyaid=?部分はmemberid=? $data[]=$sateisyaidもmemberidの間違えです
お礼
ありがとうございました。!!