检查表中是否存在数据

时间:2009-08-03 18:17:16

标签: php mysql

我如何查看表并搜索是否存在行。它背后的背面是桌子被称为敌人。每一行都有一个唯一的id,并设置为auto_increment。每行还有一个名为monsterid的唯一值。怪物ID不是auto_increment。

当一个怪物死亡时,该行被删除并被一个新行替换。所以id总是在变化。怪物也会改变。

我在php中使用$ _GET方法并且monsterid正在通过它, 基本上我正在尝试这样做

$ monsterID = 334322 //这是通过$ _GET

传递的id

checkMonsterId =“检查敌人表中是否存在怪物ID”

如果存在怪物,那么     {RUN PHP}

否则
    {RUN PHP}

如果您需要更清晰,请询问。并提前感谢您的帮助。

4 个答案:

答案 0 :(得分:6)

使用count!如果它返回> 0,它存在,否则,它不存在。

select count(*) from enemies where monsterid = 334322

您可以在PHP中使用它(在连接到数据库之后):

$monsterID = mysql_real_escape_string($monsterID);
$res = mysql_query('select count(*) from enemies where monsterid = ' . $monsterid) or die();
$row = mysql_fetch_row($res);
if ($row[0] > 0)
{
    //Monster exists
}
else
{
    //It doesn't
}

答案 1 :(得分:0)

mysql_real_escape_string对于阻止SQL injection很重要。

$monsterid = mysql_real_escape_string($_GET['monsterid']);
$query = intval(mysql_query("SELECT count(*) FROM enemies WHERE monsterid = '$monsterid'));
if (mysql_result > 0) {
    // monster exists
} else {
    // monster doesn't exist
}

答案 2 :(得分:0)

使用count,比如

从monsterid = 334322

的敌人中选择计数(*)

但是一定要确保你已经在桌面上添加了一个关于monsterid的索引。原因是,如果你不这样做,而且这不是主键,那么rdbms将被强制发出一个完整的表扫描 - 读取每一行 - 以返回值。在小型数据集上,这无关紧要,因为表格可能无论如何都会位于核心,但是一旦行数变得很大并且您正在点击磁盘进行扫描,速度差异可能很容易达到两个数量级或更多。

如果行数非常小,则索引不合理,因为使用非主键索引在插入数据时需要额外的开销,但这应该是一个明确的决定(我经常给客户留下深刻印象)谁使用了一个程序员谁不理解数据库通过向表添加索引,当编码器创建它们时很好,但随后在加载实际数据量时慢慢爬行 - 非常惊人的一行sql如何添加索引会在你的客户眼中购买你的大师身份,因为你让他的系统再次可用了。)

如果你使用subselect对数据库进行更复杂的查询,比如查找没有怪物的所有位置,那么请查看sql EXISTS子句的使用。这经常被程序员忽视(诱惑是返回实际值的计数)并且使用它通常比替代方案更快。

答案 3 :(得分:0)

更简单:

从monsterid = 334322

的敌人中选择1

如果它返回一行,你有一行,如果没有,你就没有。