1. SQL / Говнокод #699

    −873.4

    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
    SELECT BE.SORT as SORT,BE.ID as ID,DATE_FORMAT(BE.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') as TIMESTAMP_X,BE.MODIFIED_BY as
     MODIFIED_BY,DATE_FORMAT(BE.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE,BE.CREATED_BY as CREATED_BY,BE.IBLOCK_ID as
     IBLOCK_ID,BE.IBLOCK_SECTION_ID as IBLOCK_SECTION_ID,BE.ACTIVE as ACTIVE,IF(EXTRACT(HOUR_SECOND FROM BE.ACTIVE_FROM)>0,
     DATE_FORMAT(BE.ACTIVE_FROM, '%d.%m.%Y %H:%i:%s'), DATE_FORMAT(BE.ACTIVE_FROM, '%d.%m.%Y')) as ACTIVE_FROM,IF(EXTRACT(HOUR_SECOND FROM BE.ACTIVE_TO)>0, DATE_FORMAT(BE.ACTIVE_TO, '%d.%m.%Y %H:%i:%s'), DATE_FORMAT(BE.ACTIVE_TO, '%d.%m.%Y')) as
     ACTIVE_TO,IF(EXTRACT(HOUR_SECOND FROM BE.ACTIVE_FROM)>0, DATE_FORMAT(BE.ACTIVE_FROM, '%d.%m.%Y %H:%i:%s'),
     DATE_FORMAT(BE.ACTIVE_FROM, '%d.%m.%Y')) as DATE_ACTIVE_FROM,IF(EXTRACT(HOUR_SECOND FROM BE.ACTIVE_TO)>0, DATE_FORMAT(BE.ACTIVE_TO, '%d.%m.%Y %H:%i:%s'), DATE_FORMAT(BE.ACTIVE_TO, '%d.%m.%Y')) as DATE_ACTIVE_TO,BE.NAME as NAME,BE.PREVIEW_PICTURE as 
     PREVIEW_PICTURE,BE.PREVIEW_TEXT as PREVIEW_TEXT,BE.PREVIEW_TEXT_TYPE as PREVIEW_TEXT_TYPE,BE.DETAIL_PICTURE as
     DETAIL_PICTURE,BE.DETAIL_TEXT as DETAIL_TEXT,BE.DETAIL_TEXT_TYPE as DETAIL_TEXT_TYPE,BE.SEARCHABLE_CONTENT as
     SEARCHABLE_CONTENT,BE.WF_STATUS_ID as WF_STATUS_ID,BE.WF_PARENT_ELEMENT_ID as WF_PARENT_ELEMENT_ID,BE.WF_NEW as WF_NEW,if (BE.WF_DATE_LOCK is null, 'green', if(DATE_ADD(BE.WF_DATE_LOCK, interval 60 MINUTE)<now(), 'green', if(BE.WF_LOCKED_BY=0, 'yellow', 'red'))) as LOCK_STATUS,BE.WF_LOCKED_BY as WF_LOCKED_BY,DATE_FORMAT(BE.WF_DATE_LOCK, '%d.%m.%Y %H:%i:%s') as
     WF_DATE_LOCK,BE.WF_COMMENTS as WF_COMMENTS,BE.IN_SECTIONS as IN_SECTIONS,BE.SHOW_COUNTER as SHOW_COUNTER,BE.SHOW_COUNTER_START as
     SHOW_COUNTER_START,BE.CODE as CODE,BE.TAGS as TAGS,BE.XML_ID as XML_ID,BE.XML_ID as EXTERNAL_ID,BE.TMP_ID as
     TMP_ID,concat('(',U.LOGIN,') ',ifnull(U.NAME,''),' ',ifnull(U.LAST_NAME,'')) as USER_NAME,concat('(',UL.LOGIN,') ',ifnull(UL.NAME,''),' ',ifnull(UL.LAST_NAME,'')) as LOCKED_USER_NAME,concat('(',UC.LOGIN,') ',ifnull(UC.NAME,''),' ',ifnull(UC.LAST_NAME,'')) as CREATED_USER_NAME,L.DIR as LANG_DIR,B.LID as LID,B.IBLOCK_TYPE_ID as IBLOCK_TYPE_ID,B.CODE as
     IBLOCK_CODE,B.NAME as IBLOCK_NAME,B.XML_ID as IBLOCK_EXTERNAL_ID,B.DETAIL_PAGE_URL as DETAIL_PAGE_URL,B.LIST_PAGE_URL as
     LIST_PAGE_URL FROM b_iblock B INNER JOIN b_lang L ON B.LID=L.LID INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID INNER JOIN b_iblock_property FP1 ON FP1.IBLOCK_ID=B.ID AND FP1.CODE='DAY' INNER JOIN b_iblock_element_property FPV1 ON
     FP1.ID=FPV1.IBLOCK_PROPERTY_ID AND FPV1.IBLOCK_ELEMENT_ID=BE.ID INNER JOIN b_iblock_property_enum FPEN1 ON FP1.ID = FPEN1.PROPERTY_ID AND FPV1.VALUE_ENUM=FPEN1.ID INNER JOIN b_iblock_property FP2 ON FP2.IBLOCK_ID=B.ID AND FP2.CODE='MONTH' INNER JOIN
     b_iblock_element_property FPV2 ON FP2.ID=FPV2.IBLOCK_PROPERTY_ID AND FPV2.IBLOCK_ELEMENT_ID=BE.ID INNER JOIN b_iblock_property_enum FPEN2 ON FP2.ID = FPEN2.PROPERTY_ID AND FPV2.VALUE_ENUM=FPEN2.ID LEFT JOIN b_user U ON U.ID=BE.MODIFIED_BY LEFT JOIN b_user UL ON
     UL.ID=BE.WF_LOCKED_BY LEFT JOIN b_user UC ON UC.ID=BE.CREATED_BY WHERE 1=1 AND B.ID IN (0,72) AND ( (BE.WF_STATUS_ID=1 AND
     BE.WF_PARENT_ELEMENT_ID IS NULL) ) AND ((((BE.IBLOCK_ID = '72')))) AND (((BE.ACTIVE_TO >= now() OR BE.ACTIVE_TO IS NULL) AND
     (BE.ACTIVE_FROM <= now() OR BE.ACTIVE_FROM IS NULL))) AND ((((BE.ACTIVE='Y')))) AND (BE.IN_SECTIONS ='N' ) AND ((((FPEN1.VALUE LIKE
     '-1')))) AND ((((FPEN2.VALUE LIKE 'Март')))) ORDER BY BE.SORT asc

    Вот что бывает когда человека заменет скрипт, причем написаные тупым человеком, ORM рулить.

    Запостил: guest, 12 Марта 2009

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

    • Говногость:
      И че тут не так?
      Неужто в динамически сгенеренных запросах надо форматирование соблюдать?
      Ответить
    • zerkms:
      поддержу предыдущего оратора: какая разница как выглядит запрос? главное, чтобы был хороший план выполнения.
      Ответить
    • zerkms:
      и не минусуйте меня, пнятно?!
      Ответить
    • [quote=zerkms]главное, чтобы был хороший план[/quote]
      этого достаточно :)
      Ответить
    • Sam:
      Ну, план-то был хорош, судя по запросу :))
      Ответить
    • FlameS:
      [quote=Говногость]И че тут не так?[/quote]
      Что-то тут не так... :)

      А именно - то, как решена поставленная задача. И форматирование ни при чём тут вобщем-то.

      Ну а задача вкратце тут - выборка сущностей (одного типа), подпадающих под условие.


      Реализация:

      1.
      Производится выборка из мегатаблицы b_iblock_element совместно с b_iblock_element_property, а так же используя информацию из таблиц b_iblock с b_iblock_property и b_iblock_property_enum...

      2.
      Также выбирается инфа о юзерах (из таблицы b_user), создававших эти сущности (не факт, что она используется далее)
      Кроме того, в запросе участвует таблица b_lang, которая в битриксе отвечает толи за многоязыковость, толи за многосайтовость (пофигу).

      3. Ну и сама реализация запроса отпадна.

      ________________________________________ _
      PS:
      Ребята, ваяющие битрикс, оглянитесь.
      И нахрена же нам три куба леса перед ногами, лесоповальщик и бензопила с прилагающейся канистрой бензина, если мы попросили только спичек покурить?
      Ответить
    • Roman:
      Если вы работаете с Oracle так делать нельзя
      WHERE 1=1

      Почему - читаем книгу Дяди Тома...
      Ответить
    • cheef:
      меня одного смущает капслок?

      [quote= Roman]WHERE 1=1[/quote]
      такое, кстати и в CakePHP имеет место быть..
      Ответить
    • ГОСТЬ:
      >>меня одного смущает капслок?

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

      ЗЫ: код не мой, я просто разместил комент :)
      Ответить
    • Кроме того, обратите внимание на "трюк" where 1 = 1. Благодаря ему я могу просто добавлять к запросу ноль, один или более предикатов, не затрудняясь проверкой необходимости добавления предложения WHERE или условия AND. У меня всегда есть предложение WHERE, поэтому мне нужно только добавить условия AND. (c) Том Кайт.

      Чет я не понял, чего это так делать нельзя?!?
      Ответить
      • пиздеть вас нужно ногами мистер Том Кайт не затрудняясь проверкой живы ли вы еще или нет.
        Ответить
        • Очень продуктивно и конструктивно!!! Или остались только стереотипы и воспоминания что так делать нельзя, а вот почему - а хрен его...
          Ответить

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