最終的にWebページになる次のperlコードがあります。
my($dbh) = DBI->connect("DBI:mysql:host=dbsrv;database=database","my_sqlu","my_sqlp") or die "Canny Connect";
my($sql) = "SELECT * FROM hardware where srv_name = \"$srv_name\"";
my($sth) = $dbh->prepare($sql);
$sth->execute();
$sth->bind_col( 1, \my($db_id));
$sth->bind_col( 2, \my($db_srv_name));
$sth->bind_col( 5, \my($db_site));
$sth->fetchrow();
$sth->finish ();
my($sql) = "SELECT sites.\`site_code\`, sites.\`long_name\` FROM \`hardware\` JOIN \`sites\` ON \`sites\`.id=\`hardware\`.\`site\` where \`hardware\`.\`id\`=\'$db_id\'";
my($sth) = $dbh->prepare($sql);
$sth->execute();
$sth->bind_col( 1, \my($db_site_code));
$sth->bind_col( 2, \my($db_long_name));
$sth->fetchrow();
$sth->finish ();
$dbh->disconnect;
print "$db_site_code<br>$db_long_name";
上記のクエリは機能しますが、1 つの SQL クエリを実行して、2 番目のクエリを実行せずにサイト DB から db_site_code と db_long_name を取得する方法はありますか? ハードウェア DB には、サイト Db に外部キー 'id' があります。
リレーショナル DB について何かを読むと、データベースからデータを取得する最も効率的な方法だと誰もが言いますが、これが 2 つの選択クエリを実行するよりも速いことはわかりません。私が上で行ったことは、確かにそれよりも時間がかかるでしょう"select from hardware where srv_name = $srv_name"
か"select from sites where id = db_site_id"
? どんなコメントでも大歓迎です。