みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

カウントして抽出するsqlをまとめたい

mysql初心者です。宜しくお願い致します。
PHP+Mysqlで以下のスクリプトを組んでいます。

変数aを一旦決めておき、カウント結果次第で変数aの値を広げるというものです。
これをSQL文一発にまとめたいのですが、可能でしょうか?

mysqlのバージョンは5.1.34です。お詳しい方、ご教授お願い致します。

$a = 10; //仮に10

$query = "SELECT COUNT(*) AS cnt FROM mydb WHERE
col_a BETWEEN ( 100 - $a ) AND ( 100 + $a ) AND
col_b BETWEEN ( 100 - $a ) AND ( 100 + $a )";
$result = mysql_query($query);
$row = mysql_fetch_array($result);

if($row[cnt] < 10){$a = 20;} //件数が10件以下ならaの範囲を広げて結果取得

$query = "SELECT * FROM mydb WHERE
col_a BETWEEN ( 100 - $a ) AND ( 100 + $a ) AND
col_b BETWEEN ( 100 - $a ) AND ( 100 + $a )";
$result = mysql_query($query);

投稿日時 - 2011-06-17 09:17:58

QNo.6815446

すぐに回答ほしいです

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

きっちり動くかどうか怪しいですがこんな感じで変数をつかってみては?
以下と未満は違うので注意してください

SELECT *
FROM mytable
WHERE col_a
BETWEEN ( 100 - ( @a :=(
SELECT IF(COUNT( * )>=10,10,20) AS CNT
FROM mytable
WHERE col_a
BETWEEN ( 100 - ( @b :=10 ) )
AND ( 100 + @b )
AND col_b
BETWEEN ( 100 - @b )
AND ( 100 + @b )
) ) )
AND ( 100 + @a )
AND col_b
BETWEEN ( 100 - @a )
AND ( 100 + @a )

投稿日時 - 2011-06-17 10:48:45

補足

ありがとうございます。

後ほど実際に試してみます。

しかしすごい!

投稿日時 - 2011-06-17 15:34:21

お礼

お返事遅れまして申し訳ございません。
不勉強を思い知らされました。
ありがとうございました。

投稿日時 - 2011-11-05 09:51:36

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

>件数が10件以下ならaの範囲を広げて結果取得

件数が10件以上の場合は、結果を取得しなくてよいということですか?

投稿日時 - 2011-06-17 09:36:58

補足

お早いレスポンス、ありがとうございます。

10件以上ある場合は、$aの値はそのままで結果取得という事でございます。

投稿日時 - 2011-06-17 09:43:39

あなたにオススメの質問