2012-01-27 2 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 

とインデックス

1
として行または設定したユーザー名を選択するために、主キーを使用し


あなたの要求を最適化するための応答に従ってください

必要なものがidの場合、idのみがSELECTに含まれます。 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'); 

として使用します。