Pull to refresh

Comments 22

Не совсем понятно зачем(точнее КАК) можно удалять из запроса… часть запроса :)
ИМХО башка набекрень и мозги наружу (будут)
Еще запросы очень весело через Zend_DB собирать
$sql = «SELECT m.id, m.text»
//.", u.name, u.email"
." FROM messages m"
//." LEFT JOIN users u ON u.id=m.user_id"
." WHERE m.status=0"
//." AND u.id='".$user_id."'"
." ORDER BY m.date"
." LIMIT 10"
;
Убрал из запроса таблицу users
Да собственно, обычная практика по оформлению sql запросов в коде, писать в одну строчку не вижу смысла, соответственно остается один вариант. Но ваш формат запроса может выйти за пределы 1 экрана, что не есть гуд, причиной я думаю будет обращения к колонкам каждой таблицы на новой строке.
У Вас либо запросы «ОГОГО»,
либо монитор «агага»
Запрос с 10-15 join, да такие встречаются не часто. Когда вы работаете в команде, то вы не должны рассчитывать на размеры собственного экрана и берем среднее разрешение под 1280.
А куда уйдет километровый запрос, если он написан в одну строку?
Лучше уж покрутить мышью вниз, чем вправо))
С умом нужно просто все, с умом :)
непонял зачем так усложнять. почему вы не используете стандартные комментарии SQL:
— комментарий
ведь так еще проще:
$sql = "SELECT m.id, m.text --Выбираю ID и текст сообщения 
	, u.name, u.email -- Выбираю имя и email пользователя 
	FROM messages m -- Таблица сообщений
	LEFT JOIN users u ON u.id=m.user_id
	WHERE m.status=0 -- Со статусом 0 (прочитанные)
	AND u.id='".$user_id."' -- Пользователя с указанным ID
	ORDER BY m.date -- Сортировка по дате добавления сообщения
	LIMIT 10 -- Выбираем 10 записей
";

и таже свобода в быстром отключении кусков запроса и комментировании
Привычнее использовать комментарии # в SQL, но это всё равно не стоит делать на продакшене. Ибо вы отсылаете каждый раз абсолютно лишние данные.

PS Но при отладке и профилировании запросов, очень удобно в MуSQL высылать комментарии. Тут вы правы :)
подозреваю что при отправлении запроса в БД комментарии вырезаются автоматически.
а если даже и нет, то их можно вырезать перед отправкой вручную с помощью простого регекспа. но это уже дело вкуса.
в любом случае намешивать для запроса такую кучу конкатенаций как предлагает автор, для меня например — громоздко
> подозреваю что при отправлении запроса в БД комментарии вырезаются автоматически.

к сожалению, нет, иначе многие sql-инъекции не работали бы :)
если тебе потребуется в зависимости от условия приджойнивать таблицу с дополнительным фильтром — что ты будешь делать?
Мы давно практикуем другой подход:

1. Запросы хранятся в отдельном репозитории (пусть это будет отдельный файл) в ввиде элементов одного массива:
$queryCache['getSome'] = "
  SELECT 
    `col1`, `col2`, `col9`
  FROM
    `table`
  WHERE
    `text` = '%s'
  LIMIT %u;
";

2. Использование такого запроса:
mysql_query(sprintf($queryCache['getSome'], 'пользователь', 10));


Такой подход облегчает код, исключает дублирование SQL-запросов в коде.
я тоже склоняюсь к такому варианту, но иногда бывает не очень удобно:
1. кроме самого запроса всегда отправляются переводы строк и отступы.
2. некоторые SQL-клиенты в списке текущих процессов показывают только первую строку. в итоге видим только «SELECT». конечно, это уже минус конкретных программ, но всё же.

а в общем, я вас поддерживаю двумя руками.
ух ты, как будто 1999 год на дворе. посмотрите какую-нибудь ORM чтоле.
Запросы в MySQL вроде можно комментировать кака в Си, через /*… */

Я пишу примерно так:

$query = «SELECT fields1, fields2
FROM t
WHERE a =? AND b =?
ORDER BY field1»;

Имхо, проще выходит))
А как в твоем примере убрать к примеру ORDER BY field1, предположим во время тестирования? Удалить строку или заключить ее в /*… */?
выше уже писали же.
#ORDER BY field1
или
--ORDER BY field1
Я либо выношу в отдельный файлы конфигурации (часто тупо *.sql), либо использую ORM.

Писать запросы в теле приложения не очень красиво получается.
Sign up to leave a comment.

Articles