我的游戏脚本(php)中有这个代码。这会检查玩家是否装备了车辆,并且它仍然存在。我的代码:
if ($rs[vehicle] != 0) {
$sql_result2 = mysql_query("SELECT * FROM vehicles WHERE id='$rs[vehicle]'", $db);
if (mysql_num_rows($sql_result2) == 0) { mysql_query("UPDATE mobsters SET vehicle = 0 WHERE id ='$id'"); }
}
我想编辑此代码,以便如果它确实存在,它还将检查db_vehicles
表并找出所述车辆的详细信息(名称、速度等)。一种草率的做法是:
if ($rs[vehicle] != 0) {
$sql_result2 = mysql_query("SELECT * FROM vehicles WHERE id='$rs[vehicle]'", $db);
if (mysql_num_rows($sql_result2) == 0) {
mysql_query("UPDATE mobsters SET vehicle = 0 WHERE id ='$id'");
} else {
$ = mysql_fetch_array($sql_result2);
$sql_result3 = mysql_query("SELECT * FROM db_vehicles WHERE id='$[type]'", $db);
$ = mysql_fetch_array($sql_result3);
$name = $[name]; $speed = $[speed];
}
}
显然,我想通过 JOIN 来执行此操作,以使用尽可能少的查询。我应该使用哪种连接?
最佳答案
您的代码应该仅使用一个 select 语句,另一个用于更新,这是 select with join:
$sql_result3 = mysql_query("Select dbv.Name, dbv.speed, dbv.type
from db_Vehicles dbv inner join vehicles v
on v.id = dbv.id WHERE dbv.id='$rs2[type]'"
, $db);
顺便说一句,@mc10 说你的代码很容易受到 sql 注入(inject)的影响,所以你会在 SO 中找到很多关于如何防止它的内容,比如 This和 This
关于php - 如何使用 JOIN 从 PHP 查询 mysql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8282678/