PHP MySQL 5 минимизировать запрос - PullRequest
0 голосов
/ 27 января 2012
$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'];
}

Мне нужно быстро получить идентификатор пользователя.Как я могу минимизировать этот код?Я очень часто использую похожие запросы.Спасибо!

Ответы [ 4 ]

1 голос
/ 27 января 2012

Если все, что вам нужно, это 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];
    }
}
1 голос
/ 27 января 2012

Ваш запрос практически ничего не может сделать для минимизации, за исключением того, что вам не нужно получать поле username, которое уже известно в вашем предложении where. И 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 голосов
/ 27 января 2012

Мое предположение - обернуть его в функцию для этого (получить идентификатор).Я подписываюсь на то, что другие говорили о 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');

, если вы откуда-то получаете ввод, избегая имени пользователя.*

0 голосов
/ 27 января 2012

Попробуйте попросить mysql объяснить ваш запрос:

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

И следуйте ответу, чтобы оптимизировать ваш запрос


Используйте PrimaryKey, чтобы ВЫБРАТЬ строку или установить имя пользователя как INDEX

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...