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

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
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
  100. 100
SELECT 
    `1000, 1000000 field`
    (SELECT group_concat(band_category_languages.name SEPARATOR ', ')
    FROM calendar_entry_categories
    LEFT JOIN band_category_languages ON band_category_languages.band_category_id = calendar_entry_categories.band_category_id
    WHERE calendar_entry_categories.calendar_entry_id = calendar_entries.id
    AND band_category_languages.language_id = 1
    GROUP BY calendar_entry_categories.calendar_entry_id) AS band_category_string,
    (SELECT entry.id
    FROM calendar_entries AS entry
    WHERE entry.entry_kind_parent_id = calendar_entries.id
    AND entry.profile_type_id = 10869
    AND entry.profile_type = 1) AS move_to_personal_calendar,
    (SELECT count(moved_entry.id)
    FROM calendar_entries AS moved_entry
    WHERE moved_entry.entry_kind_parent_id = calendar_entries.id
    AND moved_entry.status = 3) AS count_moved,
    (SELECT user_images.image
    FROM calendar_entries AS calendar_entries1
    LEFT JOIN user_images ON user_images.id = calendar_entries1.image
    WHERE calendar_entries1.id = calendar_entries.entry_kind_parent_id
    AND calendar_entries.entry_kind = 4) AS festival_image,
    (SELECT countries1.code
    FROM calendar_entries AS calendar_entries1
    LEFT JOIN locations AS locations1 ON locations1.id = calendar_entries1.location_id
    LEFT JOIN countries AS countries1 ON countries1.id = locations1.country_id
    WHERE calendar_entries1.id = calendar_entries.entry_kind_parent_id
    AND calendar_entries.entry_kind = 4) AS festival_country_code,
    (SELECT count(*)
    FROM calendar_entry_likes
    WHERE calendar_entry_likes.calendar_entry_id = calendar_entries.id) AS count_of_likes,
    (SELECT count(*)
    FROM calendar_entry_likes
    WHERE calendar_entry_likes.calendar_entry_id = calendar_entries.id
    AND calendar_entry_likes.user_id = 10869 ) AS is_like,
    (SELECT group_concat(entry_type_languages.name SEPARATOR ', ')
    FROM calendar_entry_types
    LEFT JOIN entry_type_languages ON entry_type_languages.entry_type_id = calendar_entry_types.entry_type_id
    WHERE (calendar_entry_types.calendar_entry_id = calendar_entries.id
    OR calendar_entry_types.calendar_entry_id = calendar_entries.entry_kind_parent_id)
    AND entry_type_languages.language_id = 1
    GROUP BY calendar_entry_types.calendar_entry_id) AS entry_types_string,
    (SELECT band_addresses.city_name
    FROM band_addresses
    WHERE band_addresses.band_id = calendar_entries.profile_type_id) AS band_city_name,
    (SELECT countries.code
    FROM band_addresses
    LEFT JOIN countries ON countries.id = band_addresses.country_id
    WHERE band_addresses.band_id = calendar_entries.profile_type_id) AS band_country_code,
    (SELECT group_concat(genre_languages.name SEPARATOR ', ')
    FROM calendar_entry_genres
    LEFT JOIN genre_languages ON genre_languages.genre_id = calendar_entry_genres.genre_id
    WHERE calendar_entry_genres.calendar_entry_id = calendar_entries.id
    AND genre_languages.language_id = 1
    GROUP BY calendar_entry_genres.calendar_entry_id) AS genre_string
FROM `calendar_entries`
LEFT JOIN `locations` ON `locations`.`id` = `calendar_entries`.`location_id`
LEFT JOIN `calendar_entries` AS `festival` ON `festival`.`id` = `calendar_entries`.`entry_kind_parent_id`
LEFT JOIN `locations` AS `festival_location` ON `festival_location`.`id` = ( 
    SELECT calendar_entries1.id
    FROM calendar_entries AS calendar_entries1
    WHERE calendar_entries1.id = calendar_entries.entry_kind_parent_id
    AND calendar_entries.entry_kind = 4
)
LEFT JOIN `countries` ON `countries`.`id` = `locations`.`country_id`
LEFT JOIN `country_languages` ON `country_languages`.`country_id` = `locations`.`country_id`
LEFT JOIN `states` ON `states`.`id` = `locations`.`state_id`
LEFT JOIN `bands` ON `bands`.`id` = `calendar_entries`.`profile_type_id`
AND `bands`.`soft_delete` = 0
AND `bands`.`status` = 1
LEFT JOIN `band_images` ON `band_images`.`id` = `calendar_entries`.`image`
LEFT JOIN `band_privacy_settings` ON `band_privacy_settings`.`band_id` = `calendar_entries`.`profile_type_id`
WHERE (`bands`.`soft_delete` = 0 OR `bands`.`soft_delete` IS NULL)
AND (`bands`.`status` = 1 OR `bands`.`status` IS NULL)
AND ((
        (SELECT count(*)
        FROM band_administrators
        WHERE band_administrators.band_id = bands.id
        AND band_administrators.user_id = 10869 ) > ? OR `band_privacy_settings`.`band_privacy_level` != ?
    ) AND (
        (SELECT user_type
        FROM users
        WHERE users.id = 10869 ) = ? OR `band_privacy_settings`.`band_privacy_level` != ?
    ) AND (
        (SELECT count(*)
        FROM user_bands
        WHERE user_bands.band_id = bands.id
        AND user_bands.status = 1
        AND user_bands.user_id = 10869 ) > ? OR `band_privacy_settings`.`band_privacy_level` != ?
    ) OR `band_privacy_settings`.`band_privacy_level` IS NULL
) AND (`festival`.`entry_kind` = ? OR `festival`.`id` IS NULL)
AND (date(`calendar_entries`.`date_from`) >= ?)
AND `calendar_entries`.`soft_delete` = ?
AND (`country_languages`.`language_id` = ? OR `country_languages`.`language_id` IS NULL)
AND `calendar_entries`.`entry_kind` IN (?, ?)
AND `calendar_entries`.`event_class` IN (?, ?)
AND `calendar_entries`.`status` = ?
GROUP BY `1000, 1000000 field`
ORDER BY calendar_entries.date_from
LIMIT 1000, 20

Сидить замовник такий не тужить тай думку гадає, а що це я буду платити півтори куска спеціалусту за роботу, як є "профі" за 500 доларів, а тут ше і Вася програміст каже, а шо це ти будеш платити таку суму, як я зроблю дешевше за 300! Настрій хороший, угода укладена, робота кипить. Проходить не так багато часу, як замовник каже, а що це сторінка 2хв грузиться, а Вася каже, то нічо ми то все оптимізуємо! Проходить ще декілька місяців, а результату нема. Тоді замовнек розуміє, що Вася не профі і шукає профі в Х рази дорощого! Не так багато часу пройшло, як профі за 1000 каже, я в два рази оптимізував, більше не реально! Замовник пригнічений, шукає профі, і в один прекрасний момент знаходиться дійсно профі, який по домовленості в зарплату X оптимізував, повикидував, переписав, дописав і в результаті 50 мс при 500000 записів. Підсумок: 300 + 1000 + X != 300 :)

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

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

  • Абсолютно стандартная история.

    Сначала набираются хуй пойми кто, которые пишут хуй знает что, но зато быстро, по достижении критической массы кала нанимается более-менее адекватная команда, которая полгода-год вилкой чистит получившиеся предметы искусства, а затем её снова меняют на любителей доширака и так по кругу, пока у бизнеса не закончится лавэ.
    Ответить
    • Я знаю по другому. Какой-то крутой хуй пишет на коленке «крутую» хуйню, получает за неё премию и повышение, и съёбывается делать другую хуйню. А эту хуйню разгребать и поддерживать достаётся другим хуям, которые вместо премии за разгребание и поддержку или закапывание получат хуй.
      Ответить
      • >пишет на коленке «крутую» хуйню, получает за неё премию и повышение
        А потом, когда в базе оказывается более четырёх записей, всё становится колом
        Ответить
  • Вероятно, профессионал просто поджойнил таблички в одну, и сделал select по ней.
    Ответить
  • лайно конечно) И код говно, и попытка сэкономить -- тоже.

    А так -- типичная проблема мускульных обезьян. Подобные отчеты надо строить по денормализированным таблицам или кубам. OLAP, все дела.

    Но мускульные обезьяны обычно про такое не думаю, а пишут семиэтажный запорос, и потом дописывают в него по строчечке, покуда у них не получается такой вот копролит
    Ответить
  • Мне кажется Вася застрял на поминамии того, что написал!
    Ответить

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

Переведи на "PHP", guest!

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


    8