PHP MySQL 5最小化查询

时间:2012-01-27 15:15:55

标签: php mysql minify

$query = mysql_query("SELECT `id`, `username` FROM `users` WHERE `username` = 'admin' LIMIT 1");
if (mysql_num_rows($query))
{
    $row = mysql_fetch_array($query);
    $userid = $row['id'];
}

我需要快速获得用户ID。 我怎么能缩小这段代码?我经常使用相关的查询。 谢谢!

4 个答案:

答案 0 :(得分:1)

如果您只需要id,那么只需在SELECT中包含id。如果username是唯一的,则您不需要LIMIT

SELECT `id` FROM `users` WHERE `username` = 'admin'

如果id是您的主键,请确保您在username上有索引。

如果您没有使用行计数,请跳过对mysql_num_rows()的呼叫。此外,只返回mysql_fetch_row()的数字索引可能会有所帮助:

$query = mysql_query("SELECT `id` FROM `users` WHERE `username` = 'admin'");
if ($query)
{
    $row = mysql_fetch_row($query);
    if($row) {
        $userid = $row[0];
    }
}

答案 1 :(得分:1)

除了不需要获取where子句中已知的username字段外,查询几乎没有什么可以做的。如果没有记录,mysql_fectch_assoc()会返回false,因此您无需使用mysql_num_rows()

$query = mysql_query("SELECT `id` FROM `users` WHERE `username` = 'admin' LIMIT 1");
$row = mysql_fetch_assoc($query);
if ($row) {
     $userid = $row['id'];
}

答案 2 :(得分:0)

尝试让mysql解释您的查询:

EXPLAIN SELECT `id`, `username` FROM `users` WHERE `username` = 'admin' LIMIT 1

并按照回复优化您的请求


使用PrimaryKey选择行或将用户名设置为INDEX

答案 3 :(得分:0)

我的意思是将它包装在一个函数中(获取id)。 我订阅了其他人对mysql_num_rows和查询中的用户名所说的内容。

function get_uid($username);
{
    $query = mysql_query("SELECT `id` FROM `users` WHERE `username`='{$username}' LIMIT 1");
    return ($row = mysql_fetch_assoc($query)) ? $row['id'] : NULL;
}

并用作

$userid = get_uid('admin');

如果你从某处获得输入,请转义用户名。