Оптимизация запроса при выборке значения

golos81

Новичок
Оптимизация запроса при выборке значения

Мне надо выбрать одну строчку/значение из таблицы. Для этого пишу:
PHP:
        $query = "SELECT Id FROM `users` WHERE `Login` = '".$url[2]."'";
        $result = mysql_query($query);
        if (!mysql_error()){
			while ($row = mysql_fetch_array($result)) {
  				echo $uid=$row['Id'];
  			}
        }
        else echo mysql_error();
А можно ли выборку ОДНОГО значения сократить (в плане программного кода), например, обойтись без цикла, ведь выбирается-то все равно одно значение?

Может быть что-то наподобие вот этого:
PHP:
if (!mysql_num_rows(mysql_query("SELECT `Id` FROM `users` WHERE `Login` = '".$url[2]."'")))
?
Но в данном случае не возвращается значение, а возвращается лишь ИСТИНА или ЛОЖЬ (или количество рядов).
 

html_coder

Новичок
Во-первых, зачем тебе цикл, если ты знаешь, что ты выбираешь ровно одно значение?

А что мешает написать например функцию именно для таких случаев и использовать именно ее? Ты ей на входе передаешь запрос, а возвращает она тебе это значение.

Вообщем вариантов масса.
 

golos81

Новичок
Автор оригинала: Апельсин
А почему бы просто не использовать LIMIT?
Не совсем понял, как это может сократить программный код?

-~{}~ 25.07.07 15:15:

Автор оригинала: html_coder
Во-первых, зачем тебе цикл, если ты знаешь, что ты выбираешь ровно одно значение?

А что мешает написать например функцию именно для таких случаев и использовать именно ее? Ты ей на входе передаешь запрос, а возвращает она тебе это значение.

Вообщем вариантов масса.
Думал об этом. Возможно это решение. Но так как такие запросы делаются к разным таблицам, полям, то в ф-ю все время придется передавать названия таблицы, поля(ей) + сам запрос внутри ф-ии придется "строить", так как количество затрагиваемых столбцов не известно. Мне кажется, ф-я получится еще сложнее, чем первый приведенный пример, хотя в плане программного кода будет поменьше.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
А можно ли выборку ОДНОГО значения сократить (в плане программного кода), например, обойтись без цикла, ведь выбирается-то все равно одно значение?
1 Для выборки одного значения цикл while не нужен

-~{}~ 25.07.07 14:26:

$row = mysql_fetch_array(mysql_query('SELECT fields FROM table LIMIT 1'));
 

Zetruger

ivan.chistyakov.name
mysql_query_single($query, $link, $col = 0);
...
return $row[$col];
...

mysql_query_row($query, $link);
...
return $row;
...

mysql_query_rows($query, $link);
mysql_query_all($query, $link);
...
$rows = array();
while ($row = ...) $rows[] = $row;
return $rows;
...

-~{}~ 25.07.07 15:28:

$row = mysql_fetch_array(mysql_query('SELECT fields FROM table LIMIT 1'));
а free result дядя вызывать будет?
 

Апельсин

Оранжевое создание
Автор оригинала: golos81
Не совсем понял, как это может сократить программный код?
Если вам нужно выбрать только одну строку, то зачем вы выбираете все значения из таблицы и потом программным путем извлекаете только одну, если можно изначально из таблицы выбрать только 1 строку при помощи LIMIT?
 

golos81

Новичок
Автор оригинала: Mr_Max
1 Для выборки одного значения цикл while не нужен

-~{}~ 25.07.07 14:26:

$row = mysql_fetch_array(mysql_query('SELECT fields FROM table LIMIT 1'));
Спасибо, именно это мне и надо было!

-~{}~ 25.07.07 15:39:

Автор оригинала: Апельсин
Если вам нужно выбрать только одну строку, то зачем вы выбираете все значения из таблицы и потом программным путем извлекаете только одну, если можно изначально из таблицы выбрать только 1 строку при помощи LIMIT?
Спасибо, в предложении Mr_Max это учтено:)
 

Trianon

Новичок
Re: Оптимизация запроса при выборке значения

Автор оригинала: golos81
Мне надо выбрать одну строчку/значение из таблицы. ...
... можно ли выборку ОДНОГО значения сократить (в плане программного кода), например, обойтись без цикла, ведь выбирается-то все равно одно значение?
Если на поле login стоит уникальныи индекс (что ожидаемо),
то
PHP:
$uid = @mysql_result(mysql_query(
    $sql="SELECT Id FROM `users` WHERE `Login` = '"
         .  mysql_escape_string($url[2])."'"), 0);
решит проблему.
Но лучше оформить функцией.
 

Trianon

Новичок
Автор оригинала: HraKK
@ - лишняя.
Как сказать. Если логина в таблице нет, мы получим NULL,
а без собаки - вдобавок грязную диагностику о невозможности спозиционироваться на 0-ю строку резалтсета.
 
Сверху