php代码,更好的方法来获取SQL数据

时间:2011-08-31 23:56:41

标签: php sql join

我需要从两个表中获取数据,但我知道这是一个更好,更整洁的方法。我需要某种JOIN吗?

我会告诉你我的代码,你会明白我的意思:

if ($rs[firearm] != "") {
   $sql_result2 = mysql_query("SELECT * FROM db_firearms WHERE name='$rs[firearm]'", $db);
   $rs2 = mysql_fetch_array($sql_result2);
   $sql_result3 = mysql_query("SELECT * FROM items_firearms WHERE player='$id'", $db);
   $rs3 = mysql_fetch_array($sql_result3);

    if ($rs3[$rs2[shortname]] < 1) {
       mysql_query("UPDATE mobsters SET firearm = '' WHERE id ='$id'");
    }
}

1 个答案:

答案 0 :(得分:0)

这个问题很清楚,但是您的代码示例有很多格式问题,根据您的示例代码,我无法直接给您答案。

原因,为什么你的例子不清楚,是因为..你打算加入哪些表?从一个表中选择name='$rs[firearm]',另一个表由player='$id'选择。您必须提供隐藏数据,例如$rs$id

您一定要阅读有关mysql joinmysql left join的内容。但我会尝试使用固定语法为您提供基于代码的示例。 (请记住,我不是mysql加入专家,我没有测试这段代码,也不知道加入条件。)而且,系统结构还不清楚。

据我了解,这就是你的表所做的,对吗?

  • mobsters - 用户
  • items_firearms - 从用户表到项目表的链接
  • db_firearms - 项目

基本上,我的示例是这样做的:它将从 users 表中预加载$rs值。它将检查 links 表中是否有条目,并将结果与​​它们挂钩 items 表。但是,如果 links 表或甚至 items 表可以返回多个条目,那么这不起作用,您需要以更智能的方式循环结果。< / p>

// I can only assume, that $id is the ID of the player
$id = 2;

// Since I dont know the $rs value, then Im going to make some up
$rs = array(
    'id' => 33,
    'firearm' => 'famas'
);

if ($rs['firearm']) {
    $result = mysql_fetch_array(mysql_query("SELECT ifa.*, dbfa.* FROM `items_firearms` AS `ifa` LEFT JOIN `db_firearms` AS `dbfa` ON `ifa.shortname` = `dbfa.shortname` WHERE `ifa.player` = '$id'"));
    if ($result['id']) {
        mysql_query("UPDATE `mobsters` SET `firearm` = '' WHERE `id` = '$id'", $db);
    }
}

很明显,你是PHP和mysql的新手。所以我认为你应该编辑你的问题并谈谈你的更高目标。简而言之,您正在构建的应用程序是什么?你想用mysql查询做什么..?也许提供你的mysql表的表结构..?我敢肯定,你会把你的问题投票恢复正常,我们也可以帮助你更好。

备注

  • 您必须引用这些类型的变量:$rs[firearm] - &gt; $rs['firearm']
  • 如果你想检查你的$ rs ['firearm']是否等于某事,那么有更好的方式$rs[firearm] != ""。最简单的是if ($rs['firearm']) {echo 'foo';},但会在所有错误报告模式时生成通知消息。您可以使用isset()empty(),但请记住,isset()检查变量是否已设置。含义,即使其为false,也已设置。 empty()对未定义和空变量的响应相同,没有任何消息。
  • 此外,""表示NULL,因此如果您甚至需要使用"",请使用NULL代替...更简洁的方式..
  • 我强烈建议使用mysql类。您可以从this answer了解该想法背后的基础知识。这会让事情变得更加容易。此外,在处理动态应用程序时,mysql类是必须的。
  • if ($rs3[$rs2[shortname]] < 1) { ..没有意义..你想检查值是否为空?然后(简单):if (!$rs3[$rs2[shortname]]) { ..和一个非常严格的标准:if (empty($rs3[$rs2[shortname]])) { ..
  • 此外,您必须引用您的SQL查询,请参阅上面的示例。
  • 最后一个mysql查询缺少$ db?