【问题标题】:php code, better way of grabbing sql dataphp代码,更好的获取sql数据的方法
【发布时间】:2011-08-31 23:56:40
【问题描述】:

我需要从两个表中获取数据,但我知道有一种更好、更整洁的方法可以做到这一点。这是我需要的某种 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'");
    }
}

【问题讨论】:

  • 请发布第一个查询。
  • 我不知道你想做什么,因为你没有评论你的代码,也没有告诉我们你的表格布局。但看起来您正试图根据另一个查询结果的值来选择特定的数据库列,这听起来是个很糟糕的主意。
  • 为什么这是个坏主意?还有其他方法吗?

标签: php sql join


【解决方案1】:

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

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

您绝对应该阅读这些关于mysql joinmysql left join 的内容。但我会尝试根据您的代码以固定语法为您提供一个示例。 (请记住,我不是mysql join专家,我没有测试过这段代码,也不知道join条件。)还有,系统结构不清楚。

据我了解,这就是您的表的作用,对吗?

  • mobsters - Users
  • items_firearms - 从 users 表到 items 表的链接
  • db_firearms - 物品

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

// 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] -> $rs['firearm']
  • 如果你想检查你的 $rs['firearm'] 是否等于某个值,那么有一个比$rs[firearm] != "" 更好的方法。最简单的就是if ($rs['firearm']) {echo 'foo';},但是会产生一个通知信息,当所有错误都上报模式。您可以使用isset()empty(),但请记住,isset() 检查变量是否已设置。意思是,即使它为假,也已设置。 empty() 对未定义和空变量的反应相同,没有任何消息。
  • 另外,"" 表示NULL,所以如果你甚至需要使用"",那么请改用NULL...更简洁的方式..
  • 我强烈推荐使用 mysql 类。您可以从this answer 了解该想法背后的基础知识。这会让你的事情变得更容易。此外,在处理动态应用程序时,mysql 类是必不可少的。
  • if ($rs3[$rs2[shortname]] &lt; 1) { .. 没有意义..您要检查该值是否为空吗?然后(简单):if (!$rs3[$rs2[shortname]]) { .. 和一个非常严格的标准:if (empty($rs3[$rs2[shortname]])) { ..
  • 您还必须引用您的 sql 查询,请参阅我上面的示例。
  • 最后一个 mysql 查询是否缺少 $db?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-19
    • 2015-12-31
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    相关资源
    最近更新 更多