Что нового

Какой sql запрос необходимо выполнить?

kentavr123456

Посетитель
Регистрация
23 Фев 2022
Сообщения
19
Реакции
1
Необходимо поменять дату у всех новостей. Чтобы дата рандомно проставилась по возрастанию от нужной к примеру 2020.01.01 до текущей к примеру 2026.02.04 Айди новостей оставляем без изменений. Подскажите какой запрос нужно выполнить в базе чтобы проделать данную манипуляцию?
 
Необходимо поменять дату у всех новостей. Чтобы дата рандомно проставилась по возрастанию от нужной к примеру 2020.01.01 до текущей к примеру 2026.02.04 Айди новостей оставляем без изменений. Подскажите какой запрос нужно выполнить в базе чтобы проделать данную манипуляцию?
а подробнее можно что значит рандомно id с новостью например пять получит дату 04.02.2026 а с id 35 01.01.2020 или как.
 
Мало информации
Какая версия движка? Дату создания или дату редактирования новости?
И какой объем новостей ?
 
а подробнее можно что значит рандомно id с новостью например пять получит дату 04.02.2026 а с id 35 01.01.2020 или как.

Проставить дату создания у новостей от начального айди 1 до последнего текущего айди по порядку. Версия движка 16. Всего новостей 15к+

К примеру

15366, '2026-02-06 10:20:26'

1, '2020-01-01 18:52:44'

Мало информации
Какая версия движка? Дату создания или дату редактирования новости?
И какой объем новостей ?
Ответил выше
 
Последнее редактирование:
Проставить дату создания у новостей от начального айди 1 до последнего текущего айди по порядку. Версия движка 16. Всего новостей 15к+

К примеру

15366, '2026-02-06 10:20:26'

1, '2020-01-01 18:52:44'
Надо структуру dle_post, какие поля прописаны и хотя бы одну строку новости
 
Сначала делаем бекап на всякий, вручную или запросом
SQL:
CREATE TABLE dle_post_backup AS SELECT * FROM dle_post;

Далее
SQL:
SET @start_date = '2020-01-01 00:00:00';
SET @end_date   = NOW();

SET @rownum := 0;

UPDATE dle_post p
JOIN (
    SELECT id,
           @rownum := @rownum + 1 AS rn,
           total.cnt
    FROM dle_post
    CROSS JOIN (SELECT COUNT(*) AS cnt FROM dle_post) total
    ORDER BY id
) t ON p.id = t.id

SET p.date = DATE_ADD(
    @start_date,
    INTERVAL FLOOR(
        (TIMESTAMPDIFF(SECOND, @start_date, @end_date) / t.cnt) * t.rn
    ) SECOND
);
 
Последнее редактирование модератором:
Сначала делаем бекап на всякий, вручную или запросом
CREATE TABLE dle_post_backup AS SELECT * FROM dle_post;

Далее
SET @start_date = '2020-01-01 00:00:00';
SET @end_date = NOW();

SET @rownum := 0;

UPDATE dle_post p
JOIN (
SELECT id,
@rownum := @rownum + 1 AS rn,
total.cnt
FROM dle_post
CROSS JOIN (SELECT COUNT(*) AS cnt FROM dle_post) total
ORDER BY id
) t ON p.id = t.id
SET p.date = DATE_ADD(
@start_date,
INTERVAL FLOOR(
(TIMESTAMPDIFF(SECOND, @start_date, @end_date) / t.cnt) * t.rn
) SECOND
);
человеку уже скрипт дали https://github.com/orlov0562/ddle/blob/master/ddle.php
 
Сначала делаем бекап на всякий, вручную или запросом
SQL:
CREATE TABLE dle_post_backup AS SELECT * FROM dle_post;

Далее
SQL:
SET @start_date = '2020-01-01 00:00:00';
SET @end_date   = NOW();

SET @rownum := 0;

UPDATE dle_post p
JOIN (
    SELECT id,
           @rownum := @rownum + 1 AS rn,
           total.cnt
    FROM dle_post
    CROSS JOIN (SELECT COUNT(*) AS cnt FROM dle_post) total
    ORDER BY id
) t ON p.id = t.id

SET p.date = DATE_ADD(
    @start_date,
    INTERVAL FLOOR(
        (TIMESTAMPDIFF(SECOND, @start_date, @end_date) / t.cnt) * t.rn
    ) SECOND
);
Спасибо, то что нужно, единственное что дата проставилась на одинаковое кол-во новостей каждый день по 7 новостей. Есть возможность чтобы от 1 до 10 к примеру был рандом. в какой то день одна новость в какой то четыре и так далее??
 
Спасибо, то что нужно, единственное что дата проставилась на одинаковое кол-во новостей каждый день по 7 новостей. Есть возможность чтобы от 1 до 10 к примеру был рандом. в какой то день одна новость в какой то четыре и так далее??
Ты за месяц времени не разобрался с этим запросом? :unsure:
 
Верх