1. PHP / Говнокод #7337

    +167

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    $select = $db->select()
    ->from('advertisement AS a', $columns)
    ->joinLeft('resid_apt_secondary AS ras', 'ras.resid_apartment_residental_advertisement_id=a.id', array())
    ->joinLeft('resid_apt_newly_unready AS ranu', 'ranu.resid_apartment_residental_advertisement_id=a.id', array())
    ->joinLeft('resid_apt_newly_ready AS ranr', 'ranr.resid_apartment_residental_advertisement_id=a.id', array())
    ->joinLeft('resid_house_house AS rh', 'rh.resid_house_residental_advertisement_id=a.id', array())
    ->joinLeft('resid_house_cottage AS rc', 'rc.resid_house_residental_advertisement_id=a.id', array())
    ->joinLeft('resid_house_dacha AS rd', 'rd.resid_house_residental_advertisement_id=a.id', array())
    ->joinLeft('resid_garage AS rg', 'rg.residental_advertisement_id=a.id', array())
    ->joinLeft('sec_residental AS sr', 'sr.section_advertisement_id=a.id', array())
    ->joinLeft('bld_prod_common AS bpc', 'bpc.bld_production_commercial_advertisement_id=a.id', array())
    ->joinLeft('bld_prod_food AS bpf', 'bpf.bld_production_commercial_advertisement_id=a.id', array())
    ->joinLeft('bld_prod_restaurant AS bpr', 'bpr.bld_production_commercial_advertisement_id=a.id', array())
    ->joinLeft('bld_prod_warehouse AS bpw', 'bpw.bld_production_commercial_advertisement_id=a.id', array())
    ->joinLeft('bld_prod_garage AS bpg', 'bpg.bld_production_commercial_advertisement_id=a.id', array())
    ->joinLeft('bld_prod_service_station AS bpss', 'bpss.bld_production_commercial_advertisement_id=a.id', array())
    ->joinLeft('bld_prod_other AS bpo', 'bpo.bld_production_commercial_advertisement_id=a.id', array())
    ->joinLeft('bld_office_any AS boa', 'boa.bld_office_commercial_advertisement_id=a.id', array())
    ->joinLeft('bld_office_admin AS boad', 'boad.bld_office_commercial_advertisement_id=a.id', array())
    ->joinLeft('bld_office_sales AS bos', 'bos.bld_office_commercial_advertisement_id=a.id', array())
    ->joinLeft('bld_office_kiosk AS bok', 'bok.bld_office_commercial_advertisement_id=a.id', array())
    ->joinLeft('bld_farm_cowshed AS bfc', 'bfc.bld_farm_commercial_advertisement_id=a.id', array())
    ->joinLeft('bld_farm_workshop AS bfw', 'bfw.bld_farm_commercial_advertisement_id=a.id', array())
    ->joinLeft('bld_farm_chicken_house AS bfch', 'bfch.bld_farm_commercial_advertisement_id=a.id', array())
    ->joinLeft('bld_farm_other AS bfo', 'bfo.bld_farm_commercial_advertisement_id=a.id', array())
    ->joinLeft('gas_station AS gs', 'gs.commercial_advertisement_id=a.id', array())
    ->joinLeft('rm_prod_common AS rpc', 'rpc.room_production_commercial_advertisement_id=a.id', array())
    ->joinLeft('rm_prod_food AS rpf', 'rpf.room_production_commercial_advertisement_id=a.id', array())
    ->joinLeft('rm_prod_restaurant AS rpr', 'rpr.room_production_commercial_advertisement_id=a.id', array())
    ->joinLeft('rm_prod_warehouse AS rpw', 'rpw.room_production_commercial_advertisement_id=a.id', array())
    ->joinLeft('rm_prod_garage AS rpg', 'rpg.room_production_commercial_advertisement_id=a.id', array())
    ->joinLeft('rm_prod_service_station AS rpss', 'rpss.room_production_commercial_advertisement_id=a.id', array())
    ->joinLeft('rm_prod_other AS rpo', 'rpo.room_production_commercial_advertisement_id=a.id', array())
    ->joinLeft('rm_office_any AS roa', 'roa.rm_office_commercial_advertisement_id=a.id', array())
    ->joinLeft('rm_office_sales AS ros', 'ros.rm_office_commercial_advertisement_id=a.id', array())
    ->joinLeft('rm_office_off AS roo', 'roo.rm_office_commercial_advertisement_id=a.id', array())
    ->joinLeft('rm_office_admin AS road', 'road.rm_office_commercial_advertisement_id=a.id', array())
    ->joinLeft('rm_office_hall_rental AS roh', 'roh.rm_office_commercial_advertisement_id=a.id', array())
    ->where('is_recycled = ?', 'no')
    ->where('is_published = ?', 'yes')
    ->group(array('a.type', 'a.in_archive'));

    Переделываем проект. В старой версии нашел следующие строчки.

    Запостил: nkarakin, 25 Июля 2011

    Комментарии (37) RSS

    • Вполне мило, если база оракул, то и не такое увидеть можно ... весьма извращенный метод конечно, но сойдет, читабельно, с мануалом еще будет и понятно.
      Ответить
      • так дело как раз в том, что мускуль.
        Ответить
        • П*зда вашему мускулю с таким количеством join-ов. Никакие индексы не спасут.
          Ответить
          • Если запрос не исполняется в цикле, то всё ок. Джойн же всего лишь по одному полю.
            Ответить
            • Учителю информатики 5-го класса расскажешь, что всё окей ;-)
              Ответить
              • Немо ??
                Ответить
                • Васи ??
                  Ответить
                  • Немо, вернулся. Чем веселить будешь?
                    Ответить
                    • это не Немо, а немоден, чувак типо немодный, первая же ссылка в гугле введёт на его твиттер
                      Ответить
                      • Вроде того :)) И я не возвращался, а только прибыл. Веселить нечем - кругом одно говно :( Могу анекдот рассказать если хочешь. Но он не смешной :(
                        Ответить
                        • Одно радует что ты не Немо, это же и печалит. Анеков не надо.
                          Ответить
    • если у вас столько жойнов, может, фтопку структуру бд?
      Ответить
    • Что за ORM?
      Ответить
    • > bld_prod_food
      blyad proebal food
      Ответить
    • ох уж этот сраный котеровский враппер
      результирующий запрос был бы годным говнокодом в разделе SQL
      Ответить
      • > сраный котеровский враппер
        это о чем вы?
        Ответить
        • об обезьянах, которые cannot into SQL
          поэтому наворотили какое жуткое уродство
          ни хера же не структурированное говно получилось
          Ответить
          • в том и проблема, что не SQL, а PHP
            Ответить
            • Проблема не столько в PHP-коде, сколько в структуре базы данных.
              PHP-код здесь на троечку, но это легко исправляется (надо только вынести все конструкции "AS tbl_alias", они не там должны быть).

              ps. Благодаря этому конструктору SQL-запросов (он из ZF), у меня проект легко и непринужденно переключается с SQLite на Oracle. И не только переключается, но и работает :)
              Ответить
              • > конструктору SQL-запросов (он из ZF)
                каюсь, попутал быдлокодеров

                ценность такой масштабируемости вызывает сомнения
                Ответить
    • Впервые вижу такую жуткую структуру.

      Интересно, чем отличается
      leftJoin("ABC abc_ on abc_. [...]")
      от
      . "left join ABC abc_ on abc_.[...]" . "left join [...]"

      Видимо, чертовски переусложнённая система.
      Ответить
      • query builder из ZF же (до ORM'a, правда, не дорос)
        Ответить
        • Интересно, для каких это зверушек сделано. И, главное, зачем ты построил плотину из leftJoin'овпошто такое усложнение, если оно ровным счётом ничего не даёт? Я понимаю, если бы динамически потом что-то с этим делать, но оно же, судя по коду, сразу кверится.
          Ответить
          • query builder? дешевый слой абстракции над бд. Один проггер написал запрос с одним жойном, а поддерживать дали быдлокодеру - тот недолго думая раскопипастил
            Ответить
    • Вспомнилось: Детская болезнь «левизны» в коммунизме — труд Владимира Ленина, содержащий резкую критику противников большевизма. Взгляды большинства этих противников можно определить как левый коммунизм.
      Ответить
    • структура базы может со временем разрастись настолько, что перепроектирование будет стоить намного дороже поддержки.
      а тут кроме того, что человек не знает параметров Zend_Db_Select, нет ничего особенно говнокодистого.
      хотя, возможно, это именно тот случай, когда несколько запросов выполняются быстрее, чем один
      Ответить
      • ну в этом случае, как мне кажется, ошибка была еще на уровне проектирования БД.
        Ответить
    • Я как человек далекий от баз данных и PHP / Zend все-таки спрошу - а был ли смысл создавать столько пустых массивов? Почему нельзя было использовать один и тот же, а еще лучше - перегрузить функцию формирующую запрос, чтобы не передавать в нее параметр, по всей видимости, не нужный.
      Ответить

    Добавить комментарий