我如何查看表并搜索是否存在行。它背后的背面是桌子被称为敌人。每一行都有一个唯一的id,并设置为auto_increment。每行还有一个名为monsterid的唯一值。怪物ID不是auto_increment。
当一个怪物死亡时,该行被删除并被一个新行替换。所以id总是在变化。怪物也会改变。
我在php中使用$ _GET方法并且monsterid正在通过它, 基本上我正在尝试这样做
$ monsterID = 334322 //这是通过$ _GET
传递的idcheckMonsterId =“检查敌人表中是否存在怪物ID”
如果存在怪物,那么 {RUN PHP}
否则
{RUN PHP}
如果您需要更清晰,请询问。并提前感谢您的帮助。
答案 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如果它返回一行,你有一行,如果没有,你就没有。