Вопрос по MySQL - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB90.1887
BTC/USD67366.2529
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 02.05.2017, 23:27   #1
mamba
Mamber
 
Аватар для mamba
 
Регистрация: 28.12.2010
Адрес: Green Street
Сообщений: 3,197
Бабло: $478630
По умолчанию Вопрос по MySQL

Есть БД, в ней таблица
в ней поля, допустим:

id date Content

Так вот, с датами косяк вышел. Самый актуальный контент имеет более позднюю дату, нежели древний контент.

Например:

1 2017-05-02 20:45:05 Спомони
2 2017-05-01 19:45:05 Дигг
3 2017-05-01 18:45:05 Бздедектив

А надо поле даты перевернуть, но чтобы контент и ID остались на своих местах.

Т.е. чтобы на выходе получилось

1 2017-05-01 18:45:05 Спомони
2 2017-05-01 19:45:05 Дигг
3 2017-05-02 20:45:05 Бздедектив


Какие комманды или действия нужно провернуть?
mamba вне форума  
Старый 02.05.2017, 23:42   #2
Drunk Monk
Je suis moine ivre
 
Аватар для Drunk Monk
 
Регистрация: 03.03.2009
Сообщений: 15,268
Бабло: $797172957
По умолчанию

Тебе нужно вывод на фронтенд сделать с сортировкой по дате, или в бд данные переписать согласно новому правилу?

В первом случае пох какой id.

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

Offtopic
Drunk Monk вне форума  
Старый 02.05.2017, 23:46   #3
editeur
Senior Member
 
Регистрация: 27.09.2013
Сообщений: 697
Бабло: $101520
По умолчанию

select * from table order by date desc
editeur вне форума  
Старый 02.05.2017, 23:51   #4
Drunk Monk
Je suis moine ivre
 
Аватар для Drunk Monk
 
Регистрация: 03.03.2009
Сообщений: 15,268
Бабло: $797172957
По умолчанию

Цитата:
Сообщение от editeur Посмотреть сообщение
select * from table order by date desc
Не, я тоже сначала не так понял. Ему нужно даты поменять у строк, id и контент должны остаться связанными. Надо скрипт писать.
Drunk Monk вне форума  
Старый 03.05.2017, 01:48   #5
digg
$400
 
Аватар для digg
 
Регистрация: 17.05.2009
Сообщений: 14,031
Бабло: $1903940
Отправить сообщение для digg с помощью ICQ
По умолчанию

ага? вот она хваленая бд
в топик приглашается почитатель всяких mysql - Гектор!
digg вне форума  
Старый 03.05.2017, 04:01   #6
веломан
сыроед
 
Аватар для веломан
 
Регистрация: 01.10.2015
Сообщений: 15,875
Бабло: $1862675
По умолчанию

а бд тут причём
руки кривые

алгоритм:
считать все даты в массив1, а ID-ы в массив2
развернуть его
наложить ID-ы
записать обратно через UPDATE `tbl` SET `date`='$date' WHERE `id`=$id

Последний раз редактировалось веломан; 03.05.2017 в 04:08.
веломан на форуме  
Старый 03.05.2017, 10:06   #7
Hector
hustle
 
Аватар для Hector
 
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,890
Бабло: $1717315
Отправить сообщение для Hector с помощью Jabber
По умолчанию

+1 причем тут бд

веломан, если данных много то массив не подойдёт
Я бы сделал новую колонку чисел от 1 до 100500 всех данных. Потом новую колонку даты. Ну и скриптом копировал по одному. Например где 1=100500, 2=100499 и тд.
Уверен что и средствами mysql можно сделать но я не специалист.

Последний раз редактировалось Hector; 03.05.2017 в 10:12.
Hector вне форума  
Старый 03.05.2017, 11:26   #8
Lord_Alfred
Хитрожопый
 
Аватар для Lord_Alfred
 
Регистрация: 15.07.2008
Сообщений: 599
Бабло: $93800
По умолчанию

+1 - не трогайте СУБД, с ними всё хорошо (а с руками не очень).

А я бы не стал городить велосипеды и выдумывать как решить жопу через другую жопу. Перепишите тот скрипт/шаблон/программу, что наполняет эту базу и занесите заново в неё данные. А то сейчас выйдет, что даты разверутся так, что лучше бы просто рандомом заполнить.


PS: если сложилась такая ситуация, что первичный "заполнятор" уже не выполнить, т.к. рукиизледенцажопы, то уж лучше попробовать сделать так: тупо заполнить по логике: date(CONST_UNIX_TIME + id) - константу зададите и к ней ID будете плюсовать, это уж всяко проще чем разворачивать, просто проапдейтьте условно-рандомными данными и всё. Не думаю, что вам так даты нужны там (только для правильной сортировки скорее всего).

ЗЫЫ:

Цитата:
Сообщение от Hector Посмотреть сообщение
Я бы сделал новую колонку чисел от 1 до 100500 всех данных. Потом новую колонку даты. Ну и скриптом копировал по одному. Например где 1=100500, 2=100499 и тд.
С временной колонкой даты мысль годная, достаточно 1й такой колонки (id дублировать не нужно).
__________________
Мой блог в Telegram: https://tglink.ru/Lord_Alfred
Тесты производительности VPS: https://tglink.ru/VPSBench - присылайте с рефкой

Последний раз редактировалось Lord_Alfred; 03.05.2017 в 11:31.
Lord_Alfred вне форума  
Старый 03.05.2017, 12:17   #9
huyase
Юниор
 
Регистрация: 10.07.2012
Сообщений: 15
Бабло: $3205
По умолчанию

можно так попробовать
UPDATE table_current
JOIN (SELECT @n := @n + 1 n, id, nick,date FROM table_current , (SELECT @n := 0) m ORDER BY date) as table_temp ON table_temp.n=table_current.id
SET table_current.date = table_temp.date
huyase вне форума  
Старый 03.05.2017, 13:09   #10
веломан
сыроед
 
Аватар для веломан
 
Регистрация: 01.10.2015
Сообщений: 15,875
Бабло: $1862675
По умолчанию

Цитата:
Сообщение от Hector Посмотреть сообщение
веломан, если данных много то массив не подойдёт
Я бы сделал новую колонку чисел от 1 до 100500 всех данных. Потом новую колонку даты. Ну и скриптом копировал по одному. Например где 1=100500, 2=100499 и тд.
Уверен что и средствами mysql можно сделать но я не специалист.
тогда придётся через отдельную таблицу делать
а ещё лучше через файл.sql
иначе может получиться неожиданная хуйня
веломан на форуме