・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です。
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(税)
みたいなやり方でも、目的通り条件にあった値がヒットしました。
と言うわけで、JOINを使っていきます。アドバイスありがとうございました。