Pull to refresh
4
0
Игорь Петров @tigor

User

Send message

Оформление SQL запросов в PHP

Reading time2 min
Views4.1K
Доброго времени суток.
Решил рассказать о том, как я оформляю SQL запросы в PHP.
Итак каким критериям должен удовлетворять мой запрос:
1. Удобочитаемость
2. Возможность комментировать каждое действие в запросе
3. Возможность исключить одну из таблиц или действий при помощи комментария, не удаляя ничего из запроса

Вот пример запроса SELECT:
$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"
;


Итак каких правил оформления я придерживаюсь:
1. Каждый оператор находится на отдельной строке
2. Каждая страка заключается в «." "», что дает возможность комментирования как любого действия
$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 = "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"
;

3. Любое обращение к таблице разделяется на отдельные строки с группировкой по таблицам, что дает возможность комментарием убрать одну из таблиц
$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"
;

4. После «."», перед операторами ставится пробел
." FROM messages m"
а в
.", u.name, u.email"
запятая, что придает каждой строке назависимость от других.

Возможно кому-то покажется данный способ сложным и не привычным, но как показала практика, привыкнув к такому способу оформления запросов производительность разработки увеличивается в разы.

P.S. Не получилось показать оформленный запрос с табуляциями, увы не нашел как это делается
Total votes 23: ↑9 and ↓14-5
Comments22

Information

Rating
Does not participate
Date of birth
Registered
Activity

Specialization

Backend Developer, Fullstack Developer
Lead