SQL查询简化?

时间:2011-11-02 22:33:59

标签: sql

我必须根据另一个表的结果从数据库表中提取数据。 首先,我会提到表格以及它们的用途。

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); 

1 个答案:

答案 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