🧙Конкурс сказок!
Создание сайтов и программирование
(OFF) JohnDidact (B) 15 июн 2019

SQL-запрос. Считается ли это извращением?

Вкратце разъясню, что делает запрос:
берёт данные об обсуждениях (постах/темах), его категории, считает комментарии, лайки, дизлайки. Работает с 5 таблицами, + объединяет уже объединённые... В общем запрос получился, на мой взгляд, огроменным... Считается ли это извращением и через сколько запросов и частоте ляжет мой сервер БД?

SELECT
discus.id,discus.pubdate,discus.serial,discus.subject,discus.description,discus.preview,discus.cat,
discus.user_id,discus.user_nick,discus.hidden,discus.closed,discus.archived,
users.nick AS user, users.photo AS user_photo, users.male AS user_male,
estimate.is_like,
(SELECT COUNT(did) FROM discus_estimate WHERE is_like = 1 AND did = discus.id) AS like_count,
(SELECT COUNT(did) FROM discus_estimate WHERE is_like = 0 AND did = discus.id) AS dislike_count,
(SELECT COUNT(discus) FROM discus_com WHERE discus = discus.id AND system IS NULL
and ((discus.cat = 0 AND (0 OR hidden IS NULL)) or
(discus.cat = 1 AND (0 OR hidden IS NULL)) or
(discus.cat = 2 AND (0 OR hidden IS NULL)) or
(discus.cat = 6 AND (0 OR hidden IS NULL)) or
(discus.cat = 7 AND (0 OR hidden IS NULL)) or
(discus.cat = 9 AND (0 OR hidden IS NULL)) or
(discus.cat = 10 AND (0 OR hidden IS NULL)) or
(discus.cat = 11 AND (0 OR hidden IS NULL)) or
(discus.cat = 12 AND (0 OR hidden IS NULL)) or
(discus.cat = 13 AND (0 OR hidden IS NULL)) or
(discus.cat = 8 AND (0 OR hidden IS NULL)) or
(discus.cat = 14 AND (0 OR hidden IS NULL))
) ) AS com_count,
(SELECT MAX(pubdate) FROM discus_com WHERE discus = discus.id AND system IS NULL
and ((discus.cat = 0 AND (0 OR hidden IS NULL)) or
(discus.cat = 1 AND (0 OR hidden IS NULL)) or
(discus.cat = 2 AND (0 OR hidden IS NULL)) or
(discus.cat = 6 AND (0 OR hidden IS NULL)) or
(discus.cat = 7 AND (0 OR hidden IS NULL)) or
(discus.cat = 9 AND (0 OR hidden IS NULL)) or
(discus.cat = 10 AND (0 OR hidden IS NULL)) or
(discus.cat = 11 AND (0 OR hidden IS NULL)) or
(discus.cat = 12 AND (0 OR hidden IS NULL)) or
(discus.cat = 13 AND (0 OR hidden IS NULL)) or
(discus.cat = 8 AND (0 OR hidden IS NULL)) or
(discus.cat = 14 AND (0 OR hidden IS NULL)))
) AS last_com
FROM discus
LEFT JOIN discus_cat ON discus_cat.id = discus.cat
LEFT JOIN users ON users.id = discus.user_id
LEFT JOIN discus_estimate AS estimate ON estimate.did = discus.id AND estimate.uid = 0
WHERE (
(discus.cat = 0 AND discus.hidden IS NULL) or
(discus.cat = 1 AND discus.hidden IS NULL) or
(discus.cat = 2 AND discus.hidden IS NULL) or
(discus.cat = 6 AND discus.hidden IS NULL) or
(discus.cat = 7 AND discus.hidden IS NULL) or
(discus.cat = 9 AND discus.hidden IS NULL) or
(discus.cat = 10 AND discus.hidden IS NULL) or
(discus.cat = 11 AND discus.hidden IS NULL) or
(discus.cat = 12 AND discus.hidden IS NULL) or
(discus.cat = 13 AND discus.hidden IS NULL) or
(discus.cat = 8 AND discus.hidden IS NULL) or
(discus.cat = 14 AND discus.hidden IS NULL)
)
GROUP BY discus.id ORDER BY last_com DESC, discus.pubdate DESC LIMIT 0,5
Запрос свою работу выполняет :ковыр Лезть туда уже боюсь.

Комментарии (45)

У меня вопрос... а накуя? )
Чтобы было))
Забыл объяснить, что некоторые скрытые комментарии, темы и категории недоступны некоторым пользователям, в зависимости от их должности (правах, на самом деле) на сайте, категории или в обсуждении.
Я вот с 8 ура до 7 вечера, проипался с мотоциклом и не сделал, завтра еще ипаца.Тебе че, нечем заняться?))
есть... я работаю сутки через сутки, а ночью, после суток работы, вот этим вот занимаюсь. Я всё жду, когда же я с ума сойду и меня в психушку закроют.
Повяжут тебя с твоими шифровками. Может ты военную тайну вражине передаешь.
-2
заведи отдельную таблицу просто
там невесело
-1
Гордиться здесь точно нечем.
Вселенная видела более сложные запросы и написаны они были лучше.
объединяет уже объединённые
O_o
WHERE (
(discus.cat = 0 AND discus.hidden IS NULL) or
(discus.cat = 1 AND discus.hidden IS NULL) or
(discus.cat = 2 AND discus.hidden IS NULL) or
(discus.cat = 6 AND discus.hidden IS NULL) or
(discus.cat = 7 AND discus.hidden IS NULL) or
(discus.cat = 9 AND discus.hidden IS NULL) or
(discus.cat = 10 AND discus.hidden IS NULL) or
(discus.cat = 11 AND discus.hidden IS NULL) or
(discus.cat = 12 AND discus.hidden IS NULL) or
(discus.cat = 13 AND discus.hidden IS NULL) or
(discus.cat = 8 AND discus.hidden IS NULL) or
(discus.cat = 14 AND discus.hidden IS NULL)
)
не ну это уже лютая дичь... по скорости хз, но эстетически выглядит это отвратно.
на том же пыхе для таких целей есть in_array
in_array([0, 1, 2, 6, 7, 9, 10, 11, 12, 13, 8, 14],
sql_query('... where discus.hidden is null ...'));
впрочем не уверен, что это то что надо...
Лезть туда уже боюсь.
подними из бэкапа на виртуалке дубль бд и извращайся там скок влезет.
Показать комментарий
Скрыть комментарий
Назад 1 из 5 Вперёд
Для добавления комментариев необходимо авторизоваться
Создание сайтов и программирование
Разрушители
Новая эпическая онлайн-игра от Овермобайл. Битвы...
Тема: Светлая | Тёмная
Версия: Mobile | Lite | Touch | Доступно в Google Play