Можно ли это сделать запросом?

12 3
D
На сайте с 28.06.2008
Offline
1114
849

Есть таблица фирм - firm, в ней поле created, формата - 2015-07-10 16:20:00

Для Фирм есть комменты из таблицы - comments, в которой есть поля object_id (это ID фирмы для которой написан коммент) и created, такого же формата как и выше у фирм.

Задача - обновить created у фирм, чтобы эта дата была на 1 месяц меньше чем самый старый коммент для этой фирмы.

P.S. Я то я рандомно created для фирм проставил и не учиел что комменты и есть, и теперь на странице палево, есть комменты старше чем типа фирма добавлена на сайт.

Z0
На сайте с 03.09.2009
Offline
830
#1

Это используйте, через php /ru/forum/comment/15450026


INSERT INTO `sometable` VALUES(
FROM_UNIXTIME(
UNIX_TIMESTAMP('2010-04-30 14:53:27') + FLOOR(0 + (RAND() * 63072000))
)
)

Переберите все комментарии и подставляйте дату статьи, я бы так сделал :)

D
На сайте с 28.06.2008
Offline
1114
#2

Мне кажется можно проще как-то - одним запросом с объединением таблиц.

Z0
На сайте с 03.09.2009
Offline
830
#3

Типа такого, но не проверял 🍿

$result = mysql_query("SELECT * from `comments`");
while($row = mysql_fetch_array_result)
{
$res = mysql_query("SELECT * FROM `firm` WHERE id=$row['object_id'] LIMIT 1");
$r = mysql_fetch_array($res);
mysql_qyery("UPDATE `comments` SET created=(FROM_UNIXTIME(
UNIX_TIMESTAMP($r['created']) + FLOOR(0 + (RAND() * 63072000))
)) ")
}

Ну с объединением я не умею, я нубас в программировании :)

D
На сайте с 28.06.2008
Offline
1114
#4

Вы зачем то делаете

"UPDATE `comments`

когда задача - Задача - обновить created у фирм

Все же прошу знающий мускуль подсказать решение в виде запроса...

Z0
На сайте с 03.09.2009
Offline
830
#5
Dram:
Вы зачем то делаете

когда задача - Задача - обновить created у фирм

Все же прошу знающий мускуль подсказать решение в виде запроса...

Да, попутал :p

Ну смысл то тот-же, только код будет немного другой.. Через mysql, да еще и 1 запросом не получится, скорей всего.

D
На сайте с 28.06.2008
Offline
1114
#6
ziliboba0213:
Через mysql, да еще и 1 запросом не получится, скорей всего.

100% получится, но у меня знаний не хватает все это соединить в запрос.

AS
На сайте с 12.12.2017
Offline
6
#7

update firm set created =  DATE_SUB((select min(comments.created) from comments where firm.Id = object_id group by object_id), INTERVAL 1 MONTH);

При условии что есть комментарий для каждой фирмы

D
На сайте с 28.06.2008
Offline
1114
#8
AutoSearches:
update firm set created =  DATE_SUB((select min(comments.created) from comments where firm.Id = object_id group by object_id), INTERVAL 1 MONTH);


При условии что есть комментарий для каждой фирмы

А если нет - как добавить условие чтобы затронуло только тех у кого есть комменты?

Если если комментов нет - запись просто не обработает? (что меня тоже устраивает)

H
На сайте с 21.08.2004
Offline
122
#9
Dram:
100% получится, но у меня знаний не хватает все это соединить в запрос.

как-то так (на мускуле не пробовал), пробуйте:

update table_firms  f

inner join (select firm_id,min(data_comment) from comments_table group by firm_id) c on f.firm_id = c.firm_id
set f.data_register = c.data_comment
Есть что-то, что мы не знаем, но узнать это мы не можем.
D
На сайте с 28.06.2008
Offline
1114
#10
hrach:
как-то так (на мускуле не пробовал), пробуйте:

Не вижу в вашем варианте "минус месяц" от даты коммента при обновлении поля крейтед у фирмы

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий