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

    +175

    1. 1
    //так как в mysql есть ограничение на джойны (61), делаем следующим образом:...

    Запостил: ReallyBugMeNot, 11 Августа 2010

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

    • не говнокод, но анекдот :D
      Ответить
    • Человеку, желающему сделать 61 джойн следует немедленно орубить руки по самую попу
      Ответить
      • Есть задачи, где такое желание может возникнуть совершенно обоснованно
        Ответить
        • Только для очень сложных бизнес-отчетов в OLAP базах. Но там лучше использовать OLAP кубы.

          Впрочем, авторы этих отчетов навряли ставят такие комментарии. Да и в использование в них MySQL я не очень верю.

          PS: да! И уж конечно такие отчеты делаются ночью, а не каждый раз по запросу пыха
          Ответить
      • А ты видел SQL-запросы, которые автоматически генерирует 1С Битрикс?
        Ответить
      • А автор по ходу уже такие запросы писал, шарит что только 61!
        Ответить
    • Интересно бы посмотреть что там дальше был за код)))))
      Ответить
      • наверно этот 3032
        SELECT ct.com_id, cdt.com_name, ct.tax_id, pt.tax_name, tt.date FROM com_table AS ct LEFT OUTER
        JOIN com_des_table AS cdt ON cdt.id = ct.com_id LEFT OUTER JOIN payments_table AS pt ON pt.id =
        ct.tax_id LEFT OUTER JOIN tax_table AS tt ON tt.tax_id = ct.tax_id WHERE ct.tax_id LIKE '001%' and
        ct.com_id = '1' UNION SELECT ct.com_id, cdt.com_name, ct.tax_id, rt.tax_name, tt.date FROM com_table
        AS ct LEFT OUTER JOIN com_des_table AS cdt ON cdt.id = ct.com_id LEFT OUTER JOIN reports_table AS
        rt ON rt.id = ct.tax_id LEFT OUTER JOIN tax_table AS tt ON tt.tax_id = ct.tax_id WHERE ct.tax_id LIKE
        '002%' and ct.com_id = '1' UNION SELECT ct.com_id, cdt.com_name, ct.tax_id, pt.tax_name, tt.date FROM
        com_table AS ct LEFT OUTER JOIN com_des_table AS cdt ON cdt.id = ct.com_id LEFT OUTER JOIN
        payments_table AS pt ON pt.id = ct.tax_id LEFT OUTER JOIN tax_table AS tt ON tt.tax_id = ct.tax_id
        WHERE ct.tax_id LIKE '001%' and ct.com_id = '0' UNION SELECT ct.com_id, cdt.com_name, ct.tax_id,
        rt.tax_name, tt.date FROM com_table AS ct LEFT OUTER JOIN com_des_table AS cdt ON cdt.id = ct.com_id
        LEFT OUTER JOIN reports_table AS rt ON rt.id = ct.tax_id LEFT OUTER JOIN tax_table AS tt ON tt.tax_id =
        ct.tax_id WHERE ct.tax_id LIKE '002%' and ct.com_id = '0' UNION SELECT ct.com_id, cdt.com_name,
        ct.tax_id, pt.tax_name, tt.date FROM com_table AS ct LEFT OUTER JOIN com_des_table AS cdt ON cdt.id =
        ct.com_id LEFT OUTER JOIN payments_table AS pt ON pt.id = ct.tax_id LEFT OUTER JOIN tax_table AS tt
        ON tt.tax_id = ct.tax_id WHERE ct.tax_id LIKE '001%' and ct.com_id = '2' UNION SELECT ct.com_id,
        cdt.com_name, ct.tax_id, rt.tax_name, tt.date FROM com_table AS ct LEFT OUTER JOIN com_des_table AS
        cdt ON cdt.id = ct.com_id LEFT OUTER JOIN reports_table AS rt ON rt.id = ct.tax_id LEFT OUTER JOIN
        tax_table AS tt ON tt.tax_id = ct.tax_id WHERE ct.tax_id LIKE '002%' and ct.com_id = '2'
        Ответить
        • еще и внешние джойны
          Ответить
        • ояебу. Они это руками пишут или софтинами какими?
          Ответить
          • Я работал в web студии одной неделю.. так вот такое говно нужно было писать вручную...
            Ответить
    • Нууу , конечно можно представить себе задачу, в которой реально требуется сделать 61 джоин, но просвятите - неужели действительно есть такое ограничение? Почему именно 61?
      Ответить
      • подозреваю, что всего их 64, но 3 используется для получения информации о схеме
        Ответить
    • вызывает интерес, сколько времени это дело жойнится
      Ответить
      • не дольше таймаута )
        Ответить
        • а разве на скул и слипы часики таймаута распространяются?
          Ответить
          • Когда клиент рвет коннект -- база прекращает его выполнение.

            Если пых был CGIкой -- он умер и порвал коннект.
            Если модулем -- будет жить пока не умрет его апач (не кончится maxRequestsPerChild например).
            Ответить
            • жесть. в любом случае пых не дождется от скула долгожданного результата
              Ответить
              • да, разумеется. Это запрос для OLAP, не для OLTP.
                Ответить
              • внезапно
                http://dev.mysql.com/doc/refman/5.1/en/mysql-options.html
                MYSQL_OPT_CONNECT_TIMEOUT (argument type: unsigned int *)
                Connect timeout in seconds.
                и дальше.

                ну и таймаут локов.
                Ответить
              • но дело, как вы правильно заметили, в таймауте PHP.
                Ответить
          • да, если это виндоуз!
            ...configuration directive max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system(), stream operations, database queries, etc. is not included when determining the maximum time that the script has been running. This is not true on Windows where the measured time is real.
            Ответить
    • Это далеко не OLAP, а всего лишь сайт средних размеров.
      Ответить

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