Например, скажем, у меня есть структура данных с двумя целыми столбцами, start
и end
, но меня действительно интересует начало и различие между начальным и конечным значениями.
Я могу отправить этот запрос:
SELECT start, end - start FROM foo;
или, я мог бы просто сделать
SELECT start, end FROM foo;
и выполнить операцию $end - $start
в PHP. Лучше ли оставить такие простые операции для MySQL?
Я бы классифицировал «$ end – $ start» как бизнес-логику, и это относится к слою модели, а не к слою persistence. Это означает выполнение вычисления в PHP. Это имеет ряд преимуществ:
Если позже вы измените базы данных, вам не понадобятся те же самые операторы.
Вы можете управлять логикой, которая выполняет расчет.
Вы можете более тщательно тестировать единицы измерения.
Я одна из тех баз данных, которые должны делать данные, поэтому, если вы не используете агрегированную функцию, большинство таких вещей должно быть сделано в конце приложения. Теперь для простоты ваш запрос может быть просто
SELECT start, (end - start) AS difference FROM foo;
но для более сложных задач рекомендуется сделать много манипуляций с данными в стороне приложения.
В другом ответе говорится, что логика как можно ближе подходит к БД (что ИМО – ужасная идея), хотя в этом случае я не вижу ничего плохого в том, что вы делаете, а просто помните, что база данных уже много работает чтобы просто получить данные, если вы собираетесь делать много логики в базе данных, это сделает ее намного медленнее. Для небольших приложений это не имеет большого значения, но для крупномасштабных приложений вы очень быстро увидите последствия не только в производительности, но и добавили новые функции (логика разделения между базой данных и уровнем приложений становится очень запутанной и сложной для рефакторинга).
Обычно любое преобразование вида должно обрабатываться в слое представления. В вашем случае ваша модель спроектирована с полями start & end, поэтому вы должны раскрывать эти поля из sql.
MySQL может выполнить некоторую базовую арифметику. Тем не менее, определенно лучше выполнить такую арифметику в PHP, если вы все равно используете данные на PHP.
MySQL предназначен для простого хранения и извлечения реляционных данных.
Для простых операций я бы использовал MYSQL. Я не гуру, но мне нравится держать вещи такими же простыми и чистыми, насколько это возможно, поэтому, когда возможно, я использую встроенные функции MYSQL, чтобы сделать материал, который можно сделать с помощью php. Другими словами – использование MYSQL снизило бы объем кода и форматирование, необходимые для отображения данных.