- ベストアンサー
min について
こんにちは 宜しくお願いします。 ID 商品名 コードNO という3個のフィールドがあります。コードNOは172636,383636,172828,288388などランダムな数値です。 コードNOが100000~200000までをwhere条件で抽出し、 上の場合だと(172636,172828)この中から更に最小値 (172636)を求めコードNOが最小値であるレコードを表示したいのですがお願いします。 以下のコードでは駄目でした。 select min(codeno) from uder_tbl where codeno between 100000 and 200000;
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
MySQLのバージョンが、5.0(開発中)より前かどうかで変わってきます。 (1)5.0以降なら、サブクエリが使えます SELECT * FROM under_tbl WHERE codeno=(SELECT MIN(codeno) FROM under_tbl WHERE codeno BETWEEN 100000 AND 200000); (2)5.0より前なら、複数の問い合わせに分ける必要があります テンポラリテーブル(*1)を使用する例です。 (a)テンポラリテーブルの定義 CREATE TEMPORARY TABLE w_tbl(codeno codenoと同じデータ型); (b)操作 INSERT INTO w_tbl(codeno) SELECT MIN(codeno) FROM under_tbl WHERE codeno BETWEEN 100000 AND 200000; SELECT * FROM w_tbl ; *1 MySQL バージョン 3.23 以降では、テーブルの作成時に TEMPORARY キーワードを指定することができます。テンポラリテーブルは現在の接続の間のみ有効で、接続が閉じると自動で削除されます。
その他の回答 (2)
- osamuy
- ベストアンサー率42% (1231/2878)
> SQLエラーとなってしまいました 副クエリが使えないバージョンのMySQLでしょうか? だったら、クエリを二つ実行しないとダメかも。 エラーメッセージの詳細を補足したら、詳しい人が回答してくれるかも。 ってもしかして、 > select min(codeno) from uder_tbl where codeno between 100000 and 200000; ――で、目的のcodenoが実は取得できてない…って事はないですよね?
補足
どうやら副クエリが使えないバージョンの様です。 コマンドプロンプトではselect min(codeno) from uder_tbl where codeno between 100000 and 200000; で取得した値を元にselect from * uder_tbl where codeno=取得した値;で出来たのですが私の目的はphp+mysqlでブラウザ上に表示させたいと思ってます。select min(codeno) from uder_tbl where codeno between 100000 and 200000; で取得した値が変数として扱えるなら出来そうなのですが...エラーメッセージの詳細は特にない様です。
- osamuy
- ベストアンサー率42% (1231/2878)
select * from uder_tbl where codeno=(select min(codeno) from uder_tbl where codeno between 100000 and 200000); ――とか。
補足
早速のご回答ありがとうございます 残念ながらSQLエラーとなってしまいました。
補足
ご教授ありがとうございますchukenkenkouさん。 以下の様にしたのですがParse error: parse error in C:\php\kensaku.php on line 17 となってしまいました。ちなみに17行目は CREATE TEMPORARY TABLE w_tbl(codeno varchar(20)); です。 CREATE TEMPORARY TABLE w_tbl(codeno varchar(20)); INSERT INTO w_tbl(codeno) SELECT MIN(codeno) FROM uder_tbl WHERE codeno BETWEEN 100000 AND 200000; SELECT * FROM w_tbl;