У меня есть таблица истории, которая содержит изменения, внесенные в данные, и дату внесения изменения - история - это старые значения и дата внесения изменения.Получить содержимое следующей строки на основе даты в предыдущей строке
Существует тогда основная таблица, которая содержит текущие значения.
Фактические макеты таблиц, как:
history
id user_id colour change_date
1 1 Red 2016-01-01
2 1 Blue 2016-04-05
3 1 Green 2016-08-05
, а затем:
current
user_id colour entry_date
1 Yellow 2015-10-14
Я хочу, чтобы попытаться получить хронологический список всех значений, так выход для user_id 1 будет выглядеть :
2015-10-14 Red
2016-01-01 Blue
2016-04-05 Green
2016-08-05 Yellow
В настоящий момент я беру каждого пользователя в таблицу пользователя и проверяю, есть ли у него Тори значение - если они этого не делают, то выход просто:
2015-10-14 Yellow
Однако, когда они имеют историю я запуская с датой ввода и назначить первую историю цвета в том, что и хранящий в массиве ,
Затем я беру дату первой истории и получаю второе значение истории (через другой запрос) и сохраняю это в массиве и цикле и т. Д. - есть 150 тыс. Пользователей, и каждый может иметь 20 или 30 изменений, и это ужасно неэффективно!
Я хотел бы найти более эффективный способ сделать это либо в PHP, либо в MySQL - может ли кто-нибудь помочь?
показать нам, что вы уже пробовали. Возможно, попробуйте использовать 'inner join' и' order by' в SQL targettng ваши таблицы и даты? – KDOT
У меня есть что-то, что работает, но оно истекает на сервере по мере превышения максимального времени выполнения (6 минут), поэтому я надеюсь найти эффективный способ сделать это – bhttoan
, так, например, таблица истории: 'SELECT color , change_date FROM history WHERE user_id =? ORDER BY change_date ASC' дает вам время?Что вы используете, PDO/mySQL/mySQLi и т. Д.? и вы установили, что ваше соединение стабильно и не имеет ошибок? действительно нужно показать какой-то код – KDOT