2012-01-27 6 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의를 물어 : INDEX와 같은 행 또는 설정 이름을 선택하려면 기본 키를 사용하여 귀하의 요청을


을 최적화 할 수

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

을 그리고 응답을 따라

1

id 만 필요한 경우 id 만 선택에 포함하십시오. username이 고유 경우 LIMIT 필요하지 않습니다 : id이 기본 키

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

경우에, 당신은 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'); 

로 사용합니다.