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

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

16.05.2025, 23:16. Показов 1282. Ответов 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
Сообщений: 167
16.05.2025, 23:30  [ТС]
Сперва, берем новости за последние сутки, чередуем их, разбавляем когда 2 подряд, новость берем из суток ранее.
Ок, берем новости за вчера, чередуем, разбавляем.
И тд.

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

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

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


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

Возможен такой вариант, когда за последний месяц, публикации только от одного пользователя. В таком случаи, достать запись от другого пользователя, пусть она на месяц ранее. Главное чтобы подряд записи не шли от одного пользователя и не получилось так, что сперва выбираем записи всех пользователей по 1 последней, затем по второй(правило одного месяца, затем за второй, должно помочь это решить).
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,844
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
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru