• ベストアンサー

MySQLの使い方について

MySQL5.0を使ってアプリを開発しています。 たとえば以下のようなテーブル(またはビュー)があったとき、 goods_idの値に55,44,100のすべてをその順番に持っていてその他の値は持っていない member_idとpost_noの組み合わせがいくつあるかを知りたいような場合、 SQLを使ってどのような処理をすればよいでしょうか? member_id ,post_no ,box_no , goods_id ----------------------------------------------------------- 1 ,1 ,1 ,40 1 ,1 ,3 ,55 1 ,1 ,6 ,100 1 ,2 ,5 ,40 1 ,2 ,10 ,100 2 ,1 ,2 ,55 2 ,1 ,9 ,40 2 ,2 ,2 ,55 2 ,2 ,6 ,40 2 ,2 ,9 ,100 2 ,3 ,1 ,55 2 ,3 ,4 ,40 2 ,3 ,6 ,100 2 ,3 ,9 ,60 上記の例の場合ですと、member_idが2でpost_noが2の場合のみ 55,44,100をこの順番で持っていて、かつ他の値はありませんので、 正解は1件になります。 ちなみにbox_noの値は、1から10までに限られています。 よろしくお願いします。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

命題が正しいなら、こんな感じでいけそうですね。 SELECT count(*) from (select member_id,post_no,group_concat(cast(goods_id as char) order by box_no ASC SEPARATOR ',') as goods_list from テーブル group by member_id,post_no ) as sub where goods_list='55,40,100'

youzan1231
質問者

お礼

ありがとうございます。 うまくいきました。 本当に助かりました。

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

SQLにおける順序はORDER BYによる明確な順序づけがされない限り 担保されません。 ORDER BYできるような1つ以上のフィールドを設定してください

noname#111181
noname#111181
回答No.2

ANo.1で回答した者です。補足情報をありがとうございます。 > それらの3つは、goods_idが順に55,40,100です。 insertを質問の順番に行ったとしても、MySQLの中でその順番で格納されているかどうかは分からないのです。これはRDBMSに任されています。 そのため、残念ながら、ご質問のような判定を行うことができないというのが回答です。

youzan1231
質問者

補足

再び私の説明があいまいだったようです。 > それらの3つは、goods_idが順に55,40,100です。 上記の意味は、box_noで示されている番号の小さい順ということです。 たとえば、member_idが2,post_noが2のレコードが3つあって、 それらのbox_noには、2,6,9という値が設定されています。 それに対応する、goods_idの値は55,40,100です。 つまり、box_noの値の小さい順(昇順)にgoods_idは55,40,100の順になっています。 一方、member_idが1,post_noが1のレコードも3つあります。 それらのgoods_idも順番を考慮にいれなければ55,40,100ですが、 box_noの値は1,3,6になっていて、それに対応する順にgoods_idを並べると40,55,100ですからこの場合には条件に合致しないことになります。 何度もすみませんが、よろしくお願いします。

noname#111181
noname#111181
回答No.1

ご質問のサンプルでは「55,44,100をこの順番で持っていて」という意味が分かりません。 ご確認ください。

youzan1231
質問者

補足

あいまいな表現ですみません。 この例の場合、member_idが2、post_noが2のレコードは3つあります。 それらの3つは、goods_idが順に55,40,100です。 レコードはすべて、member_id,post_no,box_noの値の昇順にソートされています。ですから、member_idが2でpost_noが2の場合は求められている条件に合致しています。 一方、member_idが1、post_noが1のレコードも同じく3つあって、それらのgoods_idは、40,55,100ですが、その順番が55,40,100の順になってはいませんから、条件は合致していないと判断します。 member_idが2、post_noが3の場合は、goods_idが55,40,100の順に存在しますが、goods_idに60という余計なレコードがありますので、条件は合致していないと判断します。 よろしくお願いします。

関連するQ&A