Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
-28 / 0 / 0
Регистрация: 26.03.2025
Сообщений: 181

Тяжелая задача, возможно ли ее реализовать за счет SQL? Только логика запросов к Mysql

16.05.2025, 23:16. Показов 1338. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Тяжелая логика, постарался расписать и показать в картинках. Прикрепил скриншеты.

Есть запрос.

MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
WITH RankedMessages AS (
    SELECT 
        n.id,
        n.id_u,
        n.time,
        n.title_prev,
        ROW_NUMBER() OVER (PARTITION BY n.id_u ORDER BY n.time DESC) AS rn
    FROM 
        news n
)
SELECT 
        id,
        id_u,
        time,
        title_prev
FROM 
    RankedMessages
ORDER BY 
    rn, time DESC
Результат выполнения которого на 1 скриншете.

Есть втрарая картинка, там просто отсортировали по времени. Не соблюдается поочередность. Новости могуд идти подряд от одного пользователя.

Есть идея, возьмем энный интервал, предположим это будут сотки, может неделя месяц и тд. Остановимся на сутках.

Сперва необходимо вытащить записи за все сутки, главное не допустить от одного пользователя 2 новости подряд. Сортировка по времени от большего к меньшему. Ок.

Тут заноза, один пользователь опубликовал 2 и более новости. Как это решить, чтобы разбавить, спускаемся на сутки ниже и берем 1 последнюю новость другого пользователя и разбовляем эти 2 новости.

Ок, разбавили. Спускаемя на сутки ниже, откуда уже взяли 1 новость, чтобы разбавить новости в последующих сутках, ее исключаем и выполняем тоже самое.

Исключение, это когда в бд остались новости от одного пользователя и их просто нечем разбавить, просто, пусть идут подряд.
Миниатюры
Тяжелая задача, возможно ли ее реализовать за счет SQL? Только логика запросов к Mysql   Тяжелая задача, возможно ли ее реализовать за счет SQL? Только логика запросов к Mysql  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.05.2025, 23:16
Ответы с готовыми решениями:

Тяжело ли это реализовать новичку
Есть исходник чата на PHP, MySQL и jQuery (http://ruseller.com/lessons/les757/demo.zip). Сложно ли...

логика php + mysql я не могу реализовать
Здравствуйте!Помогите пожалуйста с такой проблемой. Существует 5 полей, и кнопка. Кнопка...

Кому не тяжело гляньте к задачам пожалуйста
в общем у нас началась практика по web програмированию начали решать задачи в php некоторые я...

5
-28 / 0 / 0
Регистрация: 26.03.2025
Сообщений: 181
16.05.2025, 23:30  [ТС]
Сперва, берем новости за последние сутки, чередуем их, разбавляем когда 2 подряд, новость берем из суток ранее.
Ок, берем новости за вчера, чередуем, разбавляем.
И тд.

Тогда не получится, что начинаем чередовать старые новости, когда в бд еще есть более свежие.

Добавлено через 6 минут
Старыми новостями, только разбавляем свежие, когда у 2 свежих 1 автор, с учетом чередования по пользователю
0
-28 / 0 / 0
Регистрация: 26.03.2025
Сообщений: 181
17.05.2025, 23:52  [ТС]
Хелпс
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
19.05.2025, 16:20
Выглядит, как какой-то кастомный алгоритм сортировки. Я не понял до концa что значит "разбавить". Видимо надо вводить поле "orderValue" и кастомными запросами, или серией поочередных запросов составлять его как надо. А в нужном месте просто order by orderValue
0
-28 / 0 / 0
Регистрация: 26.03.2025
Сообщений: 181
19.05.2025, 18:51  [ТС]
Не выйдет. Из таблицы выбираем схожие новости, релевантные.
Даже если проставить порядок и выбрать, это сработает только тогда когда выбираем все записи.

При выборке релевантного контента, с сортировкой order by orderValue. Получится тоже самое...


Задача:
- Сгруппировать записи по месяца, чтобы получилось, сперва выбираем за первый месяц, затем за второй.
- Внутри каждого месяца, если записи идут от одного пользователя подряд. Разбавить их, внутри месяца.

Возможен такой вариант, когда за последний месяц, публикации только от одного пользователя. В таком случаи, достать запись от другого пользователя, пусть она на месяц ранее. Главное чтобы подряд записи не шли от одного пользователя и не получилось так, что сперва выбираем записи всех пользователей по 1 последней, затем по второй(правило одного месяца, затем за второй, должно помочь это решить).
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
20.05.2025, 10:53
Сгруппировать записи по месяца, чтобы получилось, сперва выбираем за первый месяц, затем за второй.
Ну находим макс дату за интервал, выбираем саму новость под макс дату
SQL
1
2
3
4
5
6
7
WITH groups_cte AS (
SELECT MAX(n.time) AS maxTime, n.id_u AS userId, MONTH(n.time) AS monthNumber
FROM news n WHERE n.time > '2 month interval'
GROUP BY n.id_u, MONTH(n.time) 
)
SELECT * FROM news n
JOIN groups_cte g ON n.time = g.maxTime AND n.id_u = userId
Видимо далее переберать на php и разбавлять
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.05.2025, 10:53
Помогаю со студенческими работами здесь

Тяжелые и легкие(для сервера) функции PHP
Сел за оптимизацию кода. Возникло пару вопросов: 1) Если текст содержит около 2000 символов, то...

Тяжёлый скрипт вешает браузер. Что делать?
Есть некий скрипт. Браузер его обрабатывает нормально. Понадобилось выполнить скрипт много раз...

Нужно сделать таймер ТЯЖЕЛЫЙ СЛУЧАЙ
Доброе время суток дорогие форумчани. У меня такая проблема: нужно, что бы пользователь после...

Не загружаются 'тяжелые' картинки на сервер
Здравствуйте! Столкнулся с такой проблемой, что картинки больше 2mb не загружаются в папку на...

Какой самый тяжелый скрипт?
Доброе время суток! Подскажите, пожалуйста! Есть сайт новостей. На нем нет видео и используют...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru