|
|
|
|
|
для: Trianon
(03.11.2009 в 13:01)
| | Не вижу серьезных аргументов, почему бы ему там не находится - ничему он не противоречит и не вредит. Я хочу получить одно значение, я помещаю LIMIT 1 - это нормально и с точки зрения синтаксиса, и с точки зрения традиций, и с точки зрения практики программирования, и не приводит к критическому расходу ресурсов. Комментарий можно забыть, он может устареть - реальный SQL-запрос не устареет никогда. Именно поэтому мы называем переменные осмысленными именами, хотя могли бы тоже их комментировать
<?php
// А на самом деле это целочисленная переменная, со значением первичного ключа
$dlfj3ds5lfs = getValue();
?>
|
Если вы зашиваете логику и тип в название переменной у вас отпадает надобность в комментарии и его сопровождении. Это классический способ увеличения читабельности кода. Точно также и с SQL-запросом - когда LIMIT 1 находится в теле запроса - вы твердо уверены, что запрос вернет не более одной записи (это облегчает труд как разработчика, так и отладчика). Если LIMIT 1 находится в комментарии - это может быть что угодно - либо сигнал, что запрос возвращает одно значение, либо запрос когда-то возвращал одно значение и LIMIT 1 был закомментирован и не удален, либо этот запрос был преобразован из другого запроса (который возвращал одно значение), а // LIMIT 1 просто забыли убрать. Поэтому LIMIT 1 в комментарии более вреден, чем в самом запросе. | |
|
|
|
|
|
|
|
для: cheops
(03.11.2009 в 12:31)
| | вот только в SQL-коде ему делать нечего.
Ибо сигнал этот для программиста, а не для севера SQL. | |
|
|
|
|
|
|
|
для: PhMaster
(03.11.2009 в 08:39)
| | Огромный класс запросов выводит лишь одну запись - это и агрегатные функции и ряд запросов с WHERE-условиями. Не всегда очевидно, что запрос возвращает одну строку - LIMIT 1 - это сигнал - от этого запроса можно не ожидать более одной строки. Это в том числе сигнал, что тут не нужно использование ORDER BY и GROUP BY (если последнего нет в силу логики). Т.е. LIMIT 1 выступает как необязательный флаг (не влияющий на логику), а не как требование. | |
|
|
|
|
|
|
|
для: cheops
(02.11.2009 в 14:19)
| | Целиком и полностью согласен с тем, что код нужно писать так, чтобы логика приложения схватывалась как можно быстрее. Только, по-моему, средства для этого должны быть "несколько из другого арсенала".
К примеру, вот: (07.08.2009 в 15:43):
$vip = my1("SELECT vip FROM USERS WHERE userid = $id");
$bias = $vip ? 0 : my1("SELECT COUNT(*) FROM users WHERE vip");
$rating = $bias + my1("SELECT COUNT(*) FROM users WHERE $vip = vip AND id < $id ");
|
Хотя, в конце концов можно и так:
$res = mysql_query("SELECT vip FROM USERS WHERE userid = $id"); // LIMIT 1 !!!! Ололо пыщь пыщь
|
| |
|
|
|
|
|
|
|
для: cheops
(02.11.2009 в 11:20)
| | Я просто обучен тому, что в таблице строки хранятся в перемешку и чтобы вывести только одну из них неизбежно нужен Order by а так мне тоже кажется код становится более запутанным, хотя кто как привык. | |
|
|
|
|
|
|
|
для: Trianon
(02.11.2009 в 14:07)
| | Нет, не падает, а возрастает. Логика приложения схватывается быстрее, так как не нужно гадать и прикладывать дополнительные усилия на выяснение какое количество строк возвращает запрос. | |
|
|
|
|
|
|
|
для: cheops
(02.11.2009 в 14:05)
| | Не надо. Читабельность кода от этого лишь падает. | |
|
|
|
|
|
|
|
для: Trianon
(02.11.2009 в 14:03)
| | >Для каких?
см. "автор: cheops (02.11.2009 в 11:20)" - читабельность кода | |
|
|
|
|
|
|
|
для: cheops
(02.11.2009 в 11:22)
| | Для каких?
я могу представить сходу лишь один вариант применения
SELECT * FROM tbl WHERE id > $id ORDER BY id ASC LIMIT 1
|
вместо честного кода в JOIN-ом.
Но здесь явный ORDER BY. Которого, автор говорит, у вас не видел... | |
|
|
|
|
|
|
|
для: Trianon
(26.10.2009 в 19:18)
| | В качестве увеличения безопасности или надежности этот способ использовать нельзя, мы используем LIMIT 1 совершенно для других целей, хотя да, некоторые авторы предлагают использовать LIMIT 1 для увеличения безопасности. | |
|
|
|
|