+1
- 001
- 002
- 003
- 004
- 005
- 006
- 007
- 008
- 009
- 010
- 011
- 012
- 013
- 014
- 015
- 016
- 017
- 018
- 019
- 020
- 021
- 022
- 023
- 024
- 025
- 026
- 027
- 028
- 029
- 030
- 031
- 032
- 033
- 034
- 035
- 036
- 037
- 038
- 039
- 040
- 041
- 042
- 043
- 044
- 045
- 046
- 047
- 048
- 049
- 050
- 051
- 052
- 053
- 054
- 055
- 056
- 057
- 058
- 059
- 060
- 061
- 062
- 063
- 064
- 065
- 066
- 067
- 068
- 069
- 070
- 071
- 072
- 073
- 074
- 075
- 076
- 077
- 078
- 079
- 080
- 081
- 082
- 083
- 084
- 085
- 086
- 087
- 088
- 089
- 090
- 091
- 092
- 093
- 094
- 095
- 096
- 097
- 098
- 099
- 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,
12 Августа 2020
Stallman 12.08.2020 19:51 # +1
Ну сразу видно, что синьёр писал.
KOTO6yC 12.08.2020 20:33 # 0
silverreve23 11.09.2020 07:48 # 0
Desktop 12.08.2020 19:55 # +2
Сначала набираются хуй пойми кто, которые пишут хуй знает что, но зато быстро, по достижении критической массы кала нанимается более-менее адекватная команда, которая полгода-год вилкой чистит получившиеся предметы искусства, а затем её снова меняют на любителей доширака и так по кругу, пока у бизнеса не закончится лавэ.
OCETuHCKuu_nemyx 12.08.2020 21:22 # +2
MAKAKA 13.08.2020 10:58 # 0
А потом, когда в базе оказывается более четырёх записей, всё становится колом
guest8 12.08.2020 20:45 # −999
OCETuHCKuu_nemyx 12.08.2020 21:47 # 0
MAKAKA 13.08.2020 11:02 # 0
А так -- типичная проблема мускульных обезьян. Подобные отчеты надо строить по денормализированным таблицам или кубам. OLAP, все дела.
Но мускульные обезьяны обычно про такое не думаю, а пишут семиэтажный запорос, и потом дописывают в него по строчечке, покуда у них не получается такой вот копролит
silverreve23 13.08.2020 11:50 # 0