我必须根据另一个表的结果从数据库表中提取数据。 首先,我会提到表格以及它们的用途。
db_vehicles - 此表是所有车辆的数据库。它包含名称,短名称,速度和其他信息。 (例如,名称=跑车,短名称=运动,速度= 10)
示例;
id name shortname speed
1 'Sports Car' 'sports' 7
items_vehicles =此表记录了玩家汽车,每列都是db_vehicles中每辆汽车的简称。 (例如卡车= 5,运动= 8,自行车= 3)
示例;
id player bike sports truck
1 1 5 7 0
基本上我需要做的是检查玩家是否真正拥有他“装备”的车辆($ vehicle)。这会检查items_vehicles表,但要查找该表中的列,首先需要检查db_vehicles表,以获取“短名称”。
这是我目前使用的代码:
$vehicle = "Sports Car"; // example
if ($vehicle != "") { //if the players has a vehicle 'equipped'
$sql_result2 = mysql_query("SELECT shortname FROM db_vehicles WHERE name='$vehicle'", $db);
$rs2 = mysql_fetch_array($sql_result2);
//we have the shortname, now check to see if he has any
$sql_result3 = mysql_query("SELECT * FROM items_vehicles WHERE player='$id'", $db);
$rs3 = mysql_fetch_array($sql_result3);
// now if he has none, make $vehicle empty
if ($rs3[$rs2[shortname]] < 1) {
$vehicle="";
}
有更好的方法吗?也许使用子查询或其他任何一个查询?
我需要的原因是因为我在每次加载页面时都会这样做四次,它会检查车辆,武器,装备和混战。 (它用于游戏脚本)
我尝试使用类似的东西,但不起作用:
$sql_result2 = mysql_query("SELECT * FROM items_vehicles WHERE items_vehicles.(SELECT shortname FROM db_vehicles WHERE name='$vehicle')=db_vehicles.shortname WHERE items_vehicles.player='$id'", $db);
答案 0 :(得分:1)
我不确定您使用的确切数据库,但一般的SQL解决方案是内连接(这将使用SQL Server语法):
SELECT *
FROM items_vehicles
WHERE player='$id'
AND 1 >= CASE (SELECT shortname
FROM db_vehicles
WHERE name='$vehicle')
WHEN 'sports' THEN sports
WHEN 'bike' THEN bike
// add more here
ELSE 0
END