• ベストアンサー

mysql

$sql='SELECT id,kaisyamei, max(day),namae FROM message WHERE memberid=? GROUP BY id LIMIT '.$limit.' OFFSET '.$offset; どこか違いますか?

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

  • ベストアンサー
  • maiko0333
  • ベストアンサー率19% (839/4401)
回答No.3

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

a7a7a77a7a74
質問者

お礼

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

その他の回答 (3)

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.4

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

a7a7a77a7a74
質問者

お礼

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

  • maiko0333
  • ベストアンサー率19% (839/4401)
回答No.2

>具体的にはどのようなSQL文になるのでしょうか。 >サンプルコードなど教えていただけましたら幸いです 回答したように、同じid LIMITの行を1行にするために max(day)   dayは最大値を持ってくる、とか min(day) dayは最小値を持ってくる、 とか ave(tensuu) tensuuは平均を持ってくる、 などの操作をしなければなりません。

a7a7a77a7a74
質問者

お礼

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

  • maiko0333
  • ベストアンサー率19% (839/4401)
回答No.1

id,LIMITでグループを作るのですから、 kaisyameiとnamae は書いてはなりません。 id,LIMITで1行にするのです。 複数行ある同じid,LIMITに対してどの行のkaisyameiとnamaeを持ってくるのか 明示しなければなりません。

a7a7a77a7a74
質問者

お礼

$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文になるのでしょうか。 サンプルコードなど教えていただけましたら幸いです

a7a7a77a7a74
質問者

補足

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