Форматирование sql-кода

$res = mysql_query("select articles.title, articles.text, articles.id, articles.user_id, users.name from articles left join users on articles.user_id=users.id where $condition order by id desc limit 5, 10");

Такой жестяк часто встретишь, когда пишут код студенты или просто люди торопятся да так что ппц. Нифига не понятно. Запрос написан в стиле write-only. В противовес индусам - нормальные программисты используют определенные правила форматирования кода в запросах. И хоть каждый использует свои, как правило они очень похожи.

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

$query =  "select articles.title, articles.text, articles.id, articles.user_id, users.name from articles left join users on articles.user_id=users.id where $condition order by id desc limit 5, 10";

$res = mysql_query($query);

Если запрос глючит - делаем принт $query - и смотрим что не так - и не надо ничего выдирать, особенно если ф-я в оболочке принимает 100500 параметров, один из которых длиннющий запрос.

Второе правило - все ключевые слова sql должны быть с большой буквы.

$query =  "SELECT articles.title, articles.text, articles.id, articles.user_id, users.name FROM articles LEFT JOIN users ON articles.user_id=users.id WHERE $condition ORDER BY id DESC LIMIT 5, 10";

$res = mysql_query($query);

Так уже гораздо понятнее - по ключевым словам можно разобраться что и где находится.

Третье правило - выделять отступами и писать на новой строчке логические части запроса.
Четвертое - использовать псевдонимы таблиц, если их больше 2-х. В конечном итоге получается такой запрос:

$query =  "

    SELECT
        A.title,
        A.text,
        A.id,
        A.user_id,
        U.name
    FROM
        articles AS A
    LEFT JOIN
        users AS U
    ON
        A.user_id=U.id
    WHERE
        $condition
    ORDER BY
        id DESC
    LIMIT
        5, 10

";

$res = mysql_query($query);

Некоторые используют конкатенацию в описании запроса, чтобы сделать его меньше, сохранив форматирование - т.е. также как и выше, но скажем 'SELECT '.'A.title' ну и отступы понятное дело также так и у меня, просто что они не в теле запроса. Такой подход делает запрос меньше по размерам и в некотором роде производительнее (т.е. базе пересылать надо меньше), однако форматирование сохраняется только в php коде, но не сохранятеся при выводе и отладке, что неудобно.

Стоит отметить что псевдонимам таблиц стоит давать осмысленные имена. Я часто видел псевдоними t1, t2, t4 - просто номера не дают никакой информации и не помогают с читаемостью таких запросов.

Так-то :)

Акции каждый день - биржа акций. Торговые сигналы Forex.

Комментарии (3) на “Форматирование sql-кода”

  1. medvedXXL:

    Второе правило - отстой из эпохи монохромных моников. С тех пор придумали например подсветку символов, подумайте об этом. А капсить ключевые слова - глупо, и еще глупее читать такой код.

  2. Victor:

    medvedXXL, как раз капсить ключевые слова - ОТЛИЧНО! повышает читабельность кода.

  3. Dmitry:

    да ну самому приятно. красиво ж получается ;-)

Оставить комментарий

В Вашем браузере отключена поддержка JavaScript! Для корректной работы Вам необходимо включить поддержку JavaScript и обновить данную страницу.

Информеры с тИЦ и PR: получить код для сайта
Перевозка негабаритных грузов - груз негабарит. Все виды грузоперевозок. Москва.. Тренинг личностного развития - личностные тренинги. Искусство управления собой.