LINUX.ORG.RU

sql

 , ,


0

1

Есть 2 таблицы.
1 - users, поля - user_id, user_last_date, user_date
2 - заказы, поля - zakaz_userid, zakaz_date
связь user_id -> zakaz_useridорум

1. нужно запросом найти max(zakaz.zakaz_date) и записать в user_last_date для всех пользователей.
2. Найти среднее количество суток между zakaz_date для конкретного userid и записать в поле user.user_date

Времено пишется оновременно на access & mysql

★★★★

Последнее исправление: ymuv (всего исправлений: 1)

select zakaz_userid, max(zakaz_date) group by zakaz_userid;

Второе имхо проще на клиенте посчитать, выбрав все даты заказа для каждого юзера. Ну хотя можно и на sql. Что за база?

pi11 ★★★★★
()
Последнее исправление: pi11 (всего исправлений: 1)

2. (max(unix_timestamp(zakaz_date))-min(unix_timestamp(zakaz_date)))/(count(*)-1)

goingUp ★★★★★
()
Ответ на: комментарий от pi11

Как сделать select я приблизительно знаю, но как эти данные сразу же внестив таблицу без цикла (для обхода всех useid)

ymuv ★★★★
() автор топика
Ответ на: комментарий от ymuv

Не знаю в mysql так прокатит или нет -

update users a set last_date = select zd from (select b.zakaz_userid, max(b.zakaz_date) as zd from zakazy b group by b.zakaz_userid) where a.user_id = b.zakaz_user_id

pi11 ★★★★★
()

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

create or replace view v_zakaz
as
select zakaz_userid, max(zakaz_date)
  from zakaz
 group by zakaz_userid

Ну и брать данные, к примеру.

select user.user_id, user.user_date, v_zakaz.user_last_date, 
  from users, v_zakaz
 where users.user_id = v_zakaz.zakaz_userid

Как то так..

looper
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.