人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLで以下のような事って出来ますでしょうか?

・Aテーブル(条件用テーブル)
・Bテーブル(料金表)

BテーブルのmoneyフィールドとAテーブルのmoneyフィールドが一致すれば、位置した行を返す。


moneyが100のものを表示したい時、SQL文で言えば
SELECT money FROM b_table WHERE money=100

で表示されますが、money=「100」の値の部分を別テーブルから参照できればと思います。

※100はあくまで例で、条件テーブルのmoneyフィールドには様々な値が入っているとします。


現在は以下のようにしています。

$sql = "SELECT money FROM a_table";
$res = mysql_query($sql);

while($a = mysql_fetch_array($res)){

$sql_b = "SELECT money FROM a_table WHERE money='$a[money]'";
$res_b = mysql_query($sql_b);
while($b = mysql_fetch_array($res_b)){
echo $b."<br>";
}

}

joinを使う方法も考えましたが、フィールド数が増えた場合や範囲検索が必要な場合、使えないと思い、現在は上記のようにしています。

しかし、汎用性が低いと思いますので、より良い方法が無いかと思い、質問させていただきました。ご存じの方は、アドバイスいただければと思います。

MySQLは4.0.26です。

●質問者: kt26
●カテゴリ:ウェブ制作
✍キーワード:echo MySQL SELECT SQL アドバイス
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● chuken_kenkou
●80ポイント

MySQLは4.0.26です

aとb、どちらの表の検索結果で、どちらの表を検索したいのか、質問文では誤記もあるようですが。。。

MySQL 4.0系とのことなので、サブクエリが使えないと記憶しています。


そのため、

select * from b_table
 where money in(select money from a_table)

select * from b_table as b
 where exists(select * from a_table
 where b.money=money)

といった選択肢がなくなります。

MySQL 4.0系で、SQL1文で実現したいなら、

select money
 from b_table as b
 left join a_table as a
 on b.money=a.money
 where a.money is not null

といったSQLを使うしかないと思います。


joinを使う方法も考えましたが、フィールド数が増えた場合や範囲検索が必要な場合、使えないと思い

どういう意味でしょうか?

具体的に説明してもらえば、具体的なアドバイスができるかも知れません。

◎質問者からの返答

回答ありがとうございます。やはりそろそろMySQl4.1系以上に変えるべきですかね。。

バージョンの件についてはもう少し再考します。


また、joinの件ですが、思い違いをしていました。

以下のフィールドがAテーブルにあるとして

money_s(最低価格)、money_b(最大価格)、tax(税)


SELECT * FROM b_table AS b LEFT JOIN a_table AS a on (b.money>=a.money_s AND b.money<=a.money_b AND b.tax=a.tax) WHERE a.money_s is not null ORDER BY a.a_table_id

みたいなやり方でも、目的通り条件にあった値がヒットしました。

と言うわけで、JOINを使っていきます。アドバイスありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ