$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。 我怎么能缩小这段代码?我经常使用相关的查询。 谢谢!
答案 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');
如果你从某处获得输入,请转义用户名。