• 締切済み

数種類のテーブルの呼び出し

こんにちは。 全く違うフィールドを含む数種類のテーブルを全て呼び出して一覧表示するためにはどういった命令を実行すればよいのでしょうか? selectはsql文の中で一度しか使えないということはわかったのですが・・・ 例えばテーブル1(フィールドはnumber,name)テーブル2(フィールドはdate,time) とした時、出力される結果としては テーブル1 number,name テーブル2 date,time ということです。 select文を2回使えるのであれば、 $sql = "select * from テーブル1 and select * from テーブル2"; という命令でいけると考えたのですが・・・

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.4

$sql1 = "select memberinfo.number,memberinfo.name, race from memberinfo, full where (memberinfo.number = full.number) and (memberinfo.number like '%$number%') and order by time"; 最後の and が余計ですね。(order by の前の)

kenkenkenken25
質問者

お礼

ご指摘ありがとうございます! andを消去して、その後、$bodyに関してもsql文ごとに$body1・・・というように書き直すことで、全てのテーブルを表示することができました!

  • deadlock
  • ベストアンサー率67% (59/87)
回答No.3

うーん、スクリプト系の言語が不慣れなので ここから先はちょっと自信がないですが… {}の対応やDVIタグの対応が取れていないのは、 途中が省略されているからでしょうか? 省略された部分で、SQL2の処理開始時に$bodyを 上書きしていませんか?

kenkenkenken25
質問者

補足

申し訳ありません。記述に誤りがありました。 訂正したものが以下の通りです。 これだとsql2のところで$bodyが上書きされているのでしょうか? その場合sql2のところは$body2といった表記にしても良いのでしょうか? $sql1 = "select memberinfo.number,memberinfo.name, race from memberinfo, full where (memberinfo.number = full.number) and (memberinfo.number like '%$number%') and order by time"; $rst1 = mysql_query($sql1, $con); //表のヘッダーを組み立てます $body .= "<TABLE border='1' cellpadding='2' cellspacing='0'> <TR> <TH bgcolor='#66ccff'>会員番号</TH> <TH bgcolor='#66ccff'>名前</TH> <TH bgcolor='#66ccff'>ハーフ</TH> </TR>\n"; while($col = mysql_fetch_array($rst1)) { $body .= "<TR>\n"; $body .= "<TD>" . $col["number"] . "</TD>\n"; $body .= "<TD>" . $col["name"] . "</TD>\n"; $body .= "<TD>" . $col["race"] . "</TD>\n"; $body .= "</TR>\n"; } $body .= "</TABLE>\n"; $sql2 = "select date, time, race from memberinfo, half where (date like '%$date%')"; $rst2 = mysql_query($sql2, $con); //表のヘッダーを組み立てます $body .= "<TABLE border='1' cellpadding='2' cellspacing='0'> <TR> <TH bgcolor='#66ccff'>年月日</TH> <TH bgcolor='#66ccff'>ハーフ</TH> <TH bgcolor='#66ccff'>大会名</TH> </TR>\n"; while($col = mysql_fetch_array($rst2)) { $body .= "<TR>\n"; $body .= "<TD>" . $col["date"] . "</TD>\n"; $body .= "<TD>" . $col["time"] . "</TD>\n"; $body .= "<TD>" . $col["race"] . "</TD>\n"; $body .= "</TR>\n"; } $body .= "</TABLE>\n";

  • deadlock
  • ベストアンサー率67% (59/87)
回答No.2

出力結果を見る限り、問い合わせ結果には テーブル1とテーブル2の関連性はなさそうですね。 この場合、テーブルの個数分SQLを発行するのが正しいのですが…。 1つのSQLで解決したい理由などがあるのであれば、その 背景も説明をお願いします。

kenkenkenken25
質問者

補足

ご回答ありがとうございます。 sql文を複数書くという方法をとってみました。 以下の通りです。 $sql1 = "select memberinfo.number,memberinfo.name, race from memberinfo, full where (memberinfo.number = full.number) and (memberinfo.number like '%$number%') and order by time"; $rst1 = mysql_query($sql1, $con); //表のヘッダーを組み立てます $body .= "<TABLE border='1' cellpadding='2' cellspacing='0'> <TR> <TH bgcolor='#66ccff'>会員番号</TH> <TH bgcolor='#66ccff'>名前</TH> <TH bgcolor='#66ccff'>ハーフ</TH> </TR>\n"; while($col = mysql_fetch_array($rst1)) { $body .= "<TR>\n"; $body .= "<TD>" . $col["number"] . "</TD>\n"; $body .= "<TD>" . $col["name"] . "</TD>\n"; $body .= "<TD>" . $col["race"] . "</TD>\n"; $body .= "</TR>\n"; } $body .= "</TABLE></div>\n"; } $sql2 = "select date, time, race from memberinfo, half where (date like '%$date%')"; $rst2 = mysql_query($sql2, $con); //表のヘッダーを組み立てます $body .= "<TABLE border='1' cellpadding='2' cellspacing='0'> <TR> <TH bgcolor='#66ccff'>年月日</TH> <TH bgcolor='#66ccff'>ハーフ</TH> <TH bgcolor='#66ccff'>大会名</TH> </TR>\n"; while($col = mysql_fetch_array($rst2)) { $body .= "<TR>\n"; $body .= "<TD>" . $col["date"] . "</TD>\n"; $body .= "<TD>" . $col["time"] . "</TD>\n"; $body .= "<TD>" . $col["race"] . "</TD>\n"; $body .= "</TR>\n"; } $body .= "</TABLE></div>\n"; } としたのですが、後半のsql2しか結果には反映されておらず、sql1の結果が出力されませんでした。 この場合どうすればよいのでしょうか?

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

MySQLは勉強中なのでハズしてたらごめんなさい。 select A.*, B.* from テーブル1 as A, テーブル2 as B"; でどうでしょう? ただし「積」ですので、テーブル1×テーブル2の件数が返るはず。 where A.KEY=B.KEYみたいな条件つければ絞込みできますが。 お試しください。