mysql_real_escape_string / Говнокод #10965 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
$sql = 'SELECT * FROM 
                    (SELECT COUNT(company.id) as cnt_company , 
                    FROM_DAYS(TO_DAYS( company.created_at )) as day 
                        FROM company
                    JOIN contact ON contact.company_id = company.id
                    JOIN issuer ON issuer.id = company.issuer_id
                    JOIN bill ON bill.company_id = company.id
                        WHERE contact.partner_id ='.$this->_partner->getId().'
                        AND company.created_at '.$query.'
                    GROUP BY day) as A 
                LEFT JOIN
                    (SELECT COUNT(process.id) as finished, 
                    FROM_DAYS(TO_DAYS( process.finished_at )) as day2 
                        FROM process
                    JOIN bill on bill.id= process.bill_id
                    JOIN company ON bill.company_id = company.id
                    JOIN contact ON contact.company_id = company.id
                    JOIN issuer ON issuer.id = company.issuer_id
                        WHERE contact.partner_id ='.$this->_partner->getId().'
                        AND issuer.signature_article_id = bill.article_id
                    GROUP BY day2) as B ON A.day = B.day2
                LEFT JOIN
                    (SELECT COUNT( * ) as count,
                    FROM_DAYS(TO_DAYS(click.created_at)) as day3,
                    COUNT( DISTINCT click.ip ) as uniq 
                        FROM click 
                    WHERE click.partner_id = '.$this->_partner->getId().'
                    AND click.created_at '.$query.'
                       GROUP BY day3)  as C ON A.day = C.day3
                UNION
                SELECT * FROM 
                    (SELECT COUNT(company.id) as cnt_company , 
                    FROM_DAYS(TO_DAYS( company.created_at )) as day 
                        FROM company
                    JOIN contact ON contact.company_id = company.id
                    JOIN issuer ON issuer.id = company.issuer_id
                    JOIN bill ON bill.company_id = company.id
                        WHERE contact.partner_id ='.$this->_partner->getId().'
                        AND DATE(company.created_at)'.$query.'
                    GROUP BY day) as A 
                RIGHT JOIN
                    (SELECT COUNT(process.id) as finished, 
                    FROM_DAYS(TO_DAYS( process.finished_at )) as day2 
                        FROM process
                    JOIN bill on bill.id= process.bill_id
                    JOIN company ON bill.company_id = company.id
                    JOIN contact ON contact.company_id = company.id
                    JOIN issuer ON issuer.id = company.issuer_id
                        WHERE contact.partner_id ='.$this->_partner->getId().'
                    AND issuer.signature_article_id = bill.article_id
                    GROUP BY day2 ) as B ON A.day = B.day2
                RIGHT JOIN
                    (SELECT COUNT( * ) as count,
                    FROM_DAYS(TO_DAYS(click.created_at)) as day3,
                    COUNT( DISTINCT click.ip ) as uniq 
                        FROM click 
                    WHERE click.partner_id = '.$this->_partner->getId().'
                    AND click.created_at '.$query.'
                       GROUP BY day3)  as C ON A.day = C.day3';

T_T

Запостил: raga raga, (Updated )

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

  • > LEFT JOIN
    >UNION
    >RIGHT JOIN
    Вполне типичный код для Sybase ASE/MS SQL, версии которых не поддерживают full outer join.
    >() as B ON A.day = B.day2
    Вполне типичный код для Sybase ASE/MS SQL, версии которых не поддерживают with и прочие ништяки.

    > UNION
    Тут говняно. Лучше Union All.
    Ответить
    • а взглянув на
      > $sql =
      понимаешь, что это не хитрый план запроса, а просто так получилось
      Ответить
    • > MS SQL, версии которых не поддерживают full outer join
      С 7.0 так точно есть, это ж насколько древнюю версию надо искать?
      > MS SQL, версии которых не поддерживают with и прочие ништяки.
      С 2000 версии есть.

      ИМХО, у автора кода просто своё видение запроса. Нестандартное такое. Изощренное.
      Ответить
      • Хотя наверное нет - я ошибся c базой.
        >$sql
        Не заметил. Это ж пхп и значит говномускул.
        А там тоже бока с full outer join. И вроде witha нету.
        Ответить
          • Это да, но я предполагаю наиболее вероятный вариант.
            Короче видел такие конструкции в одном древнем проекте, писали их именно по указанным выше причинам.

            Конечно тупая склейка строк (могли б дублирование и устранить), и отказ от prepared statements - говно.
            Ответить

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

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8