2012-01-27 84 views
0
$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這麼快。 我如何縮小這段代碼?我經常使用相關的查詢。 謝謝!PHP MySQL的5減少查詢

回答

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']; 
} 
0

試着問MySQL來解釋你的查詢:

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

並遵循響應,以優化您的要求


使用的PrimaryKey以選擇該行或一組用戶名作爲INDEX

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]; 
    } 
} 
0

我的sugesstion是把它包裝在一個函數中(獲取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'); 

,如果你從什麼地方得到的輸入,逃避用戶名。