Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Запрос типа Select ... Limit 1(без order)

Сообщения:  [1-10]   [11-15] 

 
 автор: cheops   (03.11.2009 в 13:20)   письмо автору
 
   для: Trianon   (03.11.2009 в 13:01)
 

Не вижу серьезных аргументов, почему бы ему там не находится - ничему он не противоречит и не вредит. Я хочу получить одно значение, я помещаю LIMIT 1 - это нормально и с точки зрения синтаксиса, и с точки зрения традиций, и с точки зрения практики программирования, и не приводит к критическому расходу ресурсов. Комментарий можно забыть, он может устареть - реальный SQL-запрос не устареет никогда. Именно поэтому мы называем переменные осмысленными именами, хотя могли бы тоже их комментировать
<?php
  
// А на самом деле это целочисленная переменная, со значением первичного ключа
  
$dlfj3ds5lfs getValue();
?>

Если вы зашиваете логику и тип в название переменной у вас отпадает надобность в комментарии и его сопровождении. Это классический способ увеличения читабельности кода. Точно также и с SQL-запросом - когда LIMIT 1 находится в теле запроса - вы твердо уверены, что запрос вернет не более одной записи (это облегчает труд как разработчика, так и отладчика). Если LIMIT 1 находится в комментарии - это может быть что угодно - либо сигнал, что запрос возвращает одно значение, либо запрос когда-то возвращал одно значение и LIMIT 1 был закомментирован и не удален, либо этот запрос был преобразован из другого запроса (который возвращал одно значение), а // LIMIT 1 просто забыли убрать. Поэтому LIMIT 1 в комментарии более вреден, чем в самом запросе.

  Ответить  
 
 автор: Trianon   (03.11.2009 в 13:01)   письмо автору
 
   для: cheops   (03.11.2009 в 12:31)
 

вот только в SQL-коде ему делать нечего.
Ибо сигнал этот для программиста, а не для севера SQL.

  Ответить  
 
 автор: cheops   (03.11.2009 в 12:31)   письмо автору
 
   для: PhMaster   (03.11.2009 в 08:39)
 

Огромный класс запросов выводит лишь одну запись - это и агрегатные функции и ряд запросов с WHERE-условиями. Не всегда очевидно, что запрос возвращает одну строку - LIMIT 1 - это сигнал - от этого запроса можно не ожидать более одной строки. Это в том числе сигнал, что тут не нужно использование ORDER BY и GROUP BY (если последнего нет в силу логики). Т.е. LIMIT 1 выступает как необязательный флаг (не влияющий на логику), а не как требование.

  Ответить  
 
 автор: Trianon   (03.11.2009 в 08:57)   письмо автору
 
   для: 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 !!!! Ололо пыщь пыщь

  Ответить  
 
 автор: PhMaster   (03.11.2009 в 08:39)   письмо автору
 
   для: cheops   (02.11.2009 в 11:20)
 

Я просто обучен тому, что в таблице строки хранятся в перемешку и чтобы вывести только одну из них неизбежно нужен Order by а так мне тоже кажется код становится более запутанным, хотя кто как привык.

  Ответить  
 
 автор: cheops   (02.11.2009 в 14:19)   письмо автору
 
   для: Trianon   (02.11.2009 в 14:07)
 

Нет, не падает, а возрастает. Логика приложения схватывается быстрее, так как не нужно гадать и прикладывать дополнительные усилия на выяснение какое количество строк возвращает запрос.

  Ответить  
 
 автор: Trianon   (02.11.2009 в 14:07)   письмо автору
 
   для: cheops   (02.11.2009 в 14:05)
 

Не надо. Читабельность кода от этого лишь падает.

  Ответить  
 
 автор: cheops   (02.11.2009 в 14:05)   письмо автору
 
   для: Trianon   (02.11.2009 в 14:03)
 

>Для каких?
см. "автор: cheops (02.11.2009 в 11:20)" - читабельность кода

  Ответить  
 
 автор: Trianon   (02.11.2009 в 14:03)   письмо автору
 
   для: cheops   (02.11.2009 в 11:22)
 

Для каких?

я могу представить сходу лишь один вариант применения
SELECT * FROM tbl WHERE id > $id ORDER BY id ASC LIMIT 1

вместо честного кода в JOIN-ом.

Но здесь явный ORDER BY. Которого, автор говорит, у вас не видел...

  Ответить  
 
 автор: cheops   (02.11.2009 в 11:22)   письмо автору
 
   для: Trianon   (26.10.2009 в 19:18)
 

В качестве увеличения безопасности или надежности этот способ использовать нельзя, мы используем LIMIT 1 совершенно для других целей, хотя да, некоторые авторы предлагают использовать LIMIT 1 для увеличения безопасности.

  Ответить  

Сообщения:  [1-10]   [11-15] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования