Вернуть только первый результат MySQL Query - PullRequest
5 голосов
/ 03 января 2012

В одном из моих приложений я должен определить, присутствует ли 'foo_id' в столбце 'foo' таблицы 'foo_table'.

Мои требования будутменя встретят, как только я узнаю, что есть один такой 'foo_id'. Теперь мой вопрос состоит в том, как ограничить это первым соответствием.

Когда я проверил эти запросы по mySql EXPLAIN:

- select count(foo) from foo_table where foo=<foo_id>;
- select foo from foo_table where foo=<foo_id> limit 1;

В обоих случаях число строк равнялось 58. Есть ли в mySql способ, которым я могу ограничить количество строк до 1 (первое совпадение), чтобы строкине трогать без необходимости (потому что мне это не нужно).

Ответы [ 4 ]

8 голосов
/ 03 января 2012

план объяснения всегда будет показывать 58, потому что это количество записей, которые соответствуют вашим критериям.

Однако LIMIT 1 - это все, что вам нужно.

2 голосов
/ 03 января 2012

Вы можете использовать EXISTS следующим образом:

SELECT EXISTS(SELECT 1 FROM foo_table WHERE foo=<foo_id>).

SELECT игнорируется, поскольку EXISTS проверяет только предложение WHERE.Поскольку рекомендуется избегать использования *, здесь его заменяют на 1.

Вот документация .

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

После explain Оператор MySQL показывает общее количество строк вместо того, что вы указали в Лимите:

explain select foo from foo_table where foo=<foo_id> limit 1

OUTPUT

+----+-------------+-------------+------+---------------+------+---------+------+------+-------+
| id | select_type | table       | type | possible_keys | key  | key_len | ref  | rows | Extra |
+----+-------------+-------------+------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | foo_table   | ALL  | NULL          | NULL | NULL    | NULL |    58 |       | 
+----+-------------+-------------+------+---------------+------+---------+------+------+-------+
1 row in set (0.00 sec)
0 голосов
/ 03 января 2012

LIMIT 1 - это путь, так что вы уже сами нашли решение:

SELECT 1 FROM foo_table WHERE foo = ? LIMIT 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...