У меня есть таблица в моей базе данных, где у меня есть эти столбцы: [id, userId, locationId, created, update], и я хочу, чтобы все пользователи были из местоположения в другое место, кроме пользователей, которые существуют во втором местоположении (и если эти новые записи могут иметь дату этой новой вставки в столбцах, созданных и обновленных, были бы фантастическими). Я имею в виду, если бы я имел эту таблицу:Вставить строки в таблицу из той же таблицы
id | userId | location | created | updated
1 | 1 | 1 | 1234567 | 1234567
2 | 2 | 1 | 9876543 | 9876543
3 | 1 | 2 | 5555555 | 6666666
Если предположить, что фактическое время 9999999, после операции вставки, результат должен быть таким:
id | userId | location | created | updated
1 | 1 | 1 | 1234567 | 1234567
2 | 2 | 1 | 9876543 | 9876543
3 | 1 | 2 | 5555555 | 6666666
4 | 2 | 2 | 9999999 | 9999999
Любое решение ?? Благодарю.
EDIT (с учетом более случаев)
Существует еще некоторая информация, что я hadn't рассмотрел. Например, передача данных происходит только в одном направлении: информация идет от местоположения 1 к местоположению 2. В основном, потому что в местоположении 2, которое не было у местоположения 1, не было ни одного пользователя.
Идеальным решением было бы, что передача идет по двум направлениям, или даже с использованием более чем 2 места, что-то вроде этого:
id | userId | location | created | updated
1 | 1 | 1 | 1234567 | 1234567
2 | 2 | 1 | 9876543 | 9876543
3 | 1 | 2 | 5555555 | 6666666
4 | 3 | 2 | 1829384 | 0192837
5 | 4 | 3 | 8888833 | 9991828
6 | 5 | 4 | 1111111 | 2222222
Предполагая, что фактическое время 9999999, И я хочу, чтобы включать только места 1, 2 и 3, после операции вставки, то результат должен быть таким:
id | userId | location | created | updated
1 | 1 | 1 | 1234567 | 1234567
2 | 2 | 1 | 9876543 | 9876543
3 | 1 | 2 | 5555555 | 6666666
4 | 3 | 2 | 1829384 | 0192837
5 | 4 | 3 | 8888833 | 9991828
6 | 5 | 4 | 1111111 | 2222222
/*news*/
7 | 3 | 1 | 9999999 | 9999999
8 | 4 | 1 | 9999999 | 9999999
9 | 2 | 2 | 9999999 | 9999999
10 | 4 | 2 | 9999999 | 9999999
11 | 1 | 3 | 9999999 | 9999999
12 | 2 | 3 | 9999999 | 9999999
13 | 3 | 3 | 9999999 | 9999999
расположение 1, 2 и 3 доля их пользователей, но не место 4. Это может быть наилучшим решением, НО я бы согласился на то, что места делят свои данные с остальными один за другим ... и пр. ogrammatically я могу сделать петлю.
Спасибо @Shadow, я немного боюсь, потому что это старый проект, и до сих пор эта таблица не использовала этот уникальный индекс ... Я думаю, что я использовал все возможности программно (с php), но я собираюсь спросите немного больше об ответе Giorgios в первом случае, и если я не смогу понять, я собираюсь сделать локальные тесты перед загрузкой. Спасибо. –
Если вы хотите, чтобы пары userid - location были уникальными, самым простым способом является объявление уникального индекса для этих двух полей. В противном случае вам необходимо убедиться в том, что каждая часть кода проверяет уникальность данных перед обновлением таблицы. – Shadow