Привет, есть логически очень сложный скрипт в котором формируются
32 вида MySQL запроса (не считая order by - x 3 варианта).
Как думаете, как удобнее - сделать один сборный запрос что-то типа такого:
$SQL="SELECT * $fields
FROM $tab
$join
WHERE $where
$order";
плюсы: краткость и универсальность
минусы: нет наглядности, нет гибкости настроить каждый запрос под себя (например, в некоторых соединениях не делать JOIN из-за малого количества)
------------------
или внимательно расписать в блоках по условиям IF/ELSE (максимум до 4-х уровней глубины х 8) каждый запрос:
if($a=='')
{
$SQL="
SELECT `id1`,`name1`
FROM `tab1`
INNER JOIN `tab2`...";
}
else
{
if($b=='')
{
$SQL="
SELECT `id1`,`name2`
FROM `tab1`
INNER JOIN `tab2`...";
}
else
{
if($b=='5')
{
...
}
else
{
if...
}
}
}
плюсы: гибкая настройка, каждый запрос прекрасно видно
минусы: занимает очень много места (если всё красиво расписать около 1000 строк кода), в случае редактирования придется все их перебирать
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Истина, как обычно, посередине. Однотипные запросы вряд ли есть смысл расписывать по отдельности, всегда можно посмотреть, что там получилось в итоге, просто выводя на экран переменную $SQL.
Иначе плюсы
Цитата (GET @ 20.08.2016 - 00:52) |
гибкая настройка, каждый запрос прекрасно видно |
рискуют пеейти в минусы, как минимум антипаттерн "мягкое кодирование".
С другой стороны, поытаться собрать всё мыслимое и немыслимое в одну "рыбу" грозит жутко запутать логику.
Так что универсального совета нет и быть не может.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
twin
Спасибо.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Первый вариант логически разбить по условию на 2-3 других варианта, получится нечто среднее.
Второй вариант немного громоздкий, но тут нужно смотреть кто будет поддерживать код, даже ты через некоторое время забудешь, значит нужно хорошо закомментировать.
Я бы сделал исходя из производительности, потому как всю логику можно описать в отдельном файле, при необходимости.
_____________
Принимаю заказы, писать в ЛС
Медведь
Спасибо.
Ну, короче, изменил порядок формирования блоков if/else так чтоб более родственные встали рядом и вуаля - нарисовались общие элементы, и код сократится вдвое, а то и вчетверо в некоторых местах.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Цитата (GET @ 20.08.2016 - 04:52) |
если всё красиво расписать около 1000 строк кода |
зашквар. Проанализаровать задачу, провести декомпозицию, написать код, вот правильный путь. Сейчас же ты поступаешь как низкосортный кодер.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
sergeiss
20.08.2016 - 22:59
Цитата (GET @ 20.08.2016 - 04:52) |
сделать один сборный запрос что-то типа такого:... ...например, в некоторых соединениях не делать JOIN из-за малого количества... |
Сделай 2 шаблона - "сборных запроса", как ты их назвал. Один с джойном, другой без джойна
Насчет 2-го варианта. Прикинь, что тебе как-нибудь понадобится добавить/убавить всего одно поле в списке полей. Тогда придется прошестить "овер 1000 строк кода"... Оно тебе нужно? А в первом варианте это будет сделано легко и просто.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Архитектура БД точно правильная? Что-то очень подозрительно.
Цитата (chee @ 20.08.2016 - 21:10) |
Сейчас же ты поступаешь как низкосортный кодер. |
Ну, знаешь, чтобы никто не заметил есть жеж ioncube.
Если есть необходимость, запросы по типам выносятся в методы с говорящими названиями, где и формируются по входным данным. Там же все условия относящиеся непосредственно к лексике. Вот и всё.
Я взялся переписать этот скрипт потому как сейчас и сделано все по 1 варианту и ничего не понятно. По всему скрипту собираются его кусочки и в конце скрипта вдруг вылазит этот запрос SQL как Франкенштейн. Что? Откуда? Где? Почему так? Зачем делать JOIN, когда можно обойтись без него в некоторых запросах?
Вариант с 32 - запросами конечно не вариант. Но вариант с 12 запросами - это уже нормально. Главное мне, выдержать баланс между наглядностью, прозрачной логикой и универсальностью.
И как я написал выше - вопрос снят, будет нечто среднее из 12-16 запросов.
sergeiss
Да, я уже придумал, я там выше отписал, что сделал среднее между ними запросов стало намного меньше.
chee
Цитата |
зашквар. Проанализаровать задачу, провести декомпозицию, написать код, вот правильный путь. Сейчас же ты поступаешь как низкосортный кодер. |
Ну я стараюсь
Мне главное, чтоб было удобно работать в дальнейшим с этим скриптом, легко менять его, видеть что там.
RonЦитата |
Архитектура БД точно правильная? Что-то очень подозрительно. |
Сейчас выложу дамп, шоб ты оценил.
Цитата |
Если есть необходимость, запросы по типам выносятся в методы с говорящими названиями, где и формируются по входным данным. Там же все условия относящиеся непосредственно к лексике. Вот и всё. |
Зачем там ещё методы городить, ну куда понесло? Хочешь чтоб все было красиво, но забываешь о главном - что это просто не нужно - кодерские понты, отнимающие у скрипта время.
И причем здесь вообще ioncube, правда думаешь что мне есть дело до того, кто меня кем считает?
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Цитата (GET @ 21.08.2016 - 03:48) |
Сейчас выложу дамп, шоб ты оценил. |
Ты главное бабло приготовь, если хочешь чтобы оценивал именно я.
Цитата (GET @ 21.08.2016 - 03:48) |
правда думаешь что мне есть дело до того, кто меня кем считает? |
Уверен что да! =))
Цитата (GET @ 21.08.2016 - 03:48) |
кодерские понты, отнимающие у скрипта время.
|
Это у тебя получается говнокод, отнимающий тонну времени каждый раз когда нужно подправить логику.
Much to learn you still have...
RonКнига Притч, гл. 26 - 4/5
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
GET, правильно, даже и не слушай глупца! ))) Шариков тоже никого не слушал, даже Преображенского. Получать оскорбления от малограмотных людей, видимо, часть русских традиций.
Ты вот в детских коллажах преуспел, но в программировании что-то неочень. Нет бы заняться делом. А то тебя в группу приняли, но ты славы ей не приносишь, если честно. Да и тебе она не помогает, может быть лишь усиливает ЧСВ, что особенно противно.
И ты нам еще будешь говорить, что не важно мнение окружающих!? Думаешь я не помню как ты канючил членство в группе? Фаршманулся ты бро по полной программе, можешь еще пару раз меня оскорбить, по этому поводу.
Ron, ты обвиняешь его в завышенном ЧСВ, а сам то уже потолок пробил своим ЧСВ.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Цитата |
Ron, ты обвиняешь его в завышенном ЧСВ, а сам то уже потолок пробил своим ЧСВ. |
Да он просто молодой еще, может даже немного глупый и неопытный.
У меня, к сожалению, совершенно сейчас нет времени сюда заходить и помогать людям, как мне помогали в свое время:
twin, Invisible, inpost, Valick, FatCat, killer8080, sergeiss, Igor Vasilevsky, kaww и т.д. :
Всех можно посмотреть в этом
: или в
https://rutube.ru/video/a58c164281f8e616e4a0ddd2297ee250/
, которые я делал в благодарность этому форуму. Да и я и сам многим не раз помогал и многие меня благодарили за это. И я не знаю как меня можно обвинить в ЧСВ, я никогда не Якаю...и не пишу, какой я там супер...
А то, что я в группу попросился дак чтоб форум оживить, там один Игорь был и всё. Сами видите, как посещение упало. И очень рад, что такие парни как
Медведь, Zzipesh, Wind, Exotica к нам присоединились.
А глупый ты,
Ron потому что ты до сих пор не научился уважать своих коллег, а чтоб научится надо не просто познать код, а посидеть месяцами, а то и годами вкладывая душу в свою мечту, будь это сайт, курсы программистов или даже работа просто работа, которую ты любишь.
Если хочешь я могу прислать тебе приглашение в группу, без всяких там обид.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
inpost
22.08.2016 - 16:44
GETВопрос из разряда: с какой ноги встать с кровати. Всякие условные конструкции лепим когда они нужны, типо собирательный запрос. А если к нескольким таблицам, но простой, то почему бы и не написать в одном запросе.
Я в целом в программировании понял единую истину, запреты создают только проблемы. Вечно пытаются что-то придумать, что-то запретить, типо "так грамотнее". Правильнее всего разнообразие, когда применяешь по смыслу код, ИМХО!
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.