• ベストアンサー

mysql

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

  • MySQL
  • 回答数4
  • ありがとう数4

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

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

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

a7a7a77a7a74
質問者

お礼

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

その他の回答 (3)

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

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

a7a7a77a7a74
質問者

お礼

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

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

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

a7a7a77a7a74
質問者

お礼

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

  • maiko0333
  • ベストアンサー率19% (840/4403)
回答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の間違えです

関連するQ&A

  • GROUPBY ORDER BY

    idの大きい順から並べたいのですがうまくいきません 調べて サブクエリなどを使い実行しましたがうまくいきませんでした ご教授お願いいたします ソース $sql='SELECT memberid,mailid,max(name),max(day) FROM messageall WHERE mailid=? GROUP BY memberid ORDER BY id DESC LIMIT '.$limit.' OFFSET '.$offset; サブクエリでも試しましたが正直 ソースがめちゃくちゃでデータが表示されませんでした。 ご教授お願いいたします。

    • ベストアンサー
    • MySQL
  • mysql order by のNULLについて

    mysql order by のNULLについて テーブル tb1 memberid 2   2 cardid  1   1 name 田中  井岡 day 2016.4.10  2016.4.22 new  New NULL ソース SELECT memberid,cardid,max(name),max(day),max(new) FROM tb1 WHERE memberid=2 GROUP BY cardid ORDER BY max(day) DESC LIMIT '.$limit.' OFFSET '.$offset; すると max(new)の部分が Newと出てきます。 max(new)なのでNULLが出てくると思っていました。 NULLにしたいのですが 名前も井岡ではなく田中がでてきます max(day)をオーダーしているので新しい日の情報が出てくると思っていましたが。。。。 何か SQLの書き方に問題があるのでしょうか それともこのテーブルの作りでは不可能なのでしょうか? 無知な私に ご教授お願いいたします。

    • ベストアンサー
    • MySQL
  • sql エラー

    エラーが出ます。どこかおかしな点はありますでしょうか。 エラー文 Call to a member function prepare() on a non-object ソース $page = 1; $limit = 2; $offset = $limit * ($page - 1); $sql='SELECT COUNT(*) FROM message WHERE memberid=? GROUP BY aid'; $stmt=$dbh->prepare($sql); $data[]=$memberid; var_dump($data); $stmt->execute($data); $dbh=null; $total=$stmt->fetchColumn(); $lastpage= ceil($total/$limit); $sql='SELECT aid,max(kaisyamei),max(day) FROM message WHERE memberid=? GROUP BY aid LIMIT '.$limit.' OFFSET '.$offset; $stmt=$dbh->prepare($sql); $stmt->execute($data); $dbh=null; ご教授お願いいたします。

    • ベストアンサー
    • MySQL
  • サブクエリに関して()

    $sql2 = 'SELECT ki,id,name,day,tday,st FROM tim WHERE (ki,name,day,st) IN (SELECT ki,name,day,max(st) FROM tim WHERE (ki,name,day) IN (SELECT ki,name,MAX(day) FROM tim where ki='.$_SESSION['ki'].' GROUP BY id) group by id)' ; IDごとにカラムday,stの最大値を出力するもです。(以前おしえていただきました) これに更にsvの最大値も条件にいれたい場合どうしたらいいでしょうか?;

    • 締切済み
    • PHP
  • sql offset

    offsetやlimitをつけると 結果が表示されなくなります。 $sql='SELECT naiyo FROM zyoho WHERE cityid=? OR brandid=? だけのSQLだと結果は表示されるのですが。 解決方法をご教授お願いいたします。 下記はソースです。 $page=1; $limit=2; $offset = $limit * ($page - 1); $lastpage = ceil($total / $limit); if($brandid=='') { $sql='SELECT naiyo FROM zyoho WHERE cityid=? OR brandid=? ORDER BY `code` DESC LIMIT'.$limit.' OFFSET '.$offset.''; }else{ $sql='SELECT naiyo FROM zyoho WHERE cityid=? AND brandid=?ORDER BY `code` DESC LIMIT'.$limit.' OFFSET '.$offset.''; } $stmt=$dbh->prepare($sql); $data[]=$cityid; $data[]=$brandid; $stmt->execute($data); $dbh = null;

    • ベストアンサー
    • MySQL
  • MYSQLに関してです

    SELECT a.kid,a.id,a.name,b.kid,b.id,b.name,MAX(b.day),b.tday FROM me AS a, mem AS b WHERE a.kid='.$_SESSION["kid"].' and a.kid=b.kid and a.id=b.id group by a.id このような文を書いてます。 この場合、MAX(b.day)のデータを取得しているわけですが、tday部分が空であるのに他のレコードから違うtdayの情報を取得してしまい困っています。どうしたらいいでしょうか?? 分かりやすく書くと データベース内には day tday 5 2 2 8 と入ってるとして上記のSQL文を命令後は day tday 8 2 と入ってしまっていますが私は day tday 8 と本来の組み合わせで表示したいです。

    • 締切済み
    • PHP
  • ★年度ごとに情報を一覧表示

    各情報を、年度ごとに表示したいと考えています。 基となる年度の条件指定方法が分かりません。 (????と記述しているところです。) 各サブクエリは、年度ごとに情報がない時もあります。 select ????,1tbl.day ,2tbl.day ,3tbl.day from  (select nen,max(day) from 1tbl  where nen < '2006' and nen > '2001'  group by nen  order by nen desc ) 1tbl,  (select nen,max(day) from 2tbl  where nen < '2006' and nen > '2001'  group by nen  order by nen desc ) 2tbl,  (select nen,max(day) from 3tbl  where nen < '2006' and nen > '2001'  group by nen  order by nen desc ) 3tbl where ???? 各サブクエリの情報 1tbl-------2tbl------3tbl------- nen--day----nen--day----nen--day--- 2005-2005/12/12-2005-2005/12/13--------- ---------2004-2004/11/10-2004-2004/12/30 2002-2002/09/01------------------ 表示 nen--1day-----2day-----3day--- 2006-------------------- 2005-2005/12/12--2005/12/13------- 2004--------2004/11/10--2004/12/30 2003-------------------- 2002-2002/09/01-------------- 2001-------------------- ↑上記のように表示したいと考えています。 この形で取れるSQLの書き方はあるでしょうか。 (2006年や2003年のように、情報が0件のところは取れなくてもいいです。) サブクエリ部分をばらばらでSQL発行すれば済む話なのですが、 一度に取れる方法は無いのか気になりまして。 (年度のみのテーブルはありません。) よろしくお願いします。

  • よければ教えて頂きたいです。

    先ほど教えて頂いた 'SELECT kid,id,name,day,tday FROM em WHERE kid='.$_SESSION["kid"].' AND (name,day) IN (SELECT name,MAX(day) FROM em GROUP BY name)'; だと正常に表示されましたが指摘通り最大値が同じ日があれば二つ表示されるのを防ぐためスタート時間も加えてみました。 'SELECT kid,id,name,day,tday,st FROM em WHERE kid='.$_SESSION["kid"].' AND (name,day,st) IN (SELECT name,MAX(day),MAX(st) FROM em GROUP BY name)'; stという部分です。これを加えたところ、一つの名前が表示されなくなりました。 表示されなくなったデータと他のデータを比べても差異がないので、原因がよくわからないのですが、。。

    • ベストアンサー
    • PHP
  • INSERT,DELETEを同時に

    $sql = "INSERT INTO daykg(id,name,day,kg)select distinct id,name,'$day','-1'from daykg"; $sql = "DELETE FROM daykg WHERE distinct ORDER BY day DESC LIMIT 5,1"; 上で会員全員にインサート、下で会員全員の五行目から一行削除としているつもりですが、合ってますか??

    • ベストアンサー
    • PHP
  • テーブルの結合について

    以下の二つを実行すると、2 の方がかなり速いのですが理由が分かりません。 分かる方教えてもらっていいですか? DBはMYSQLでInoDBです。 ちなみに Aは1万件、B は10万件ほど 1 のSQL SELECT * FROM A LEFT JOIN (SELECT * FROM B WHERE ・・・ GROUP BY XXX) B ON A.id = B.XXX WHERE ・・・ GROUP BY A.id 2 のSQL (SELECT * FROM A ・・・ GROUP BY ID ) A LEFT JOIN (SELECT * FROM B WHERE ・・・ GROUP BY XXX) ON A.ID = B.XXX.ID