Я хочу обновить столбец, сравнивая каждую строку со всеми другими строками в таблице, но не могу понять, как отличить имена столбцов в обновляемой строке от строк, по которым производится поиск.
Вот упрощенный пример ...
люди:
+--------+-----+----------------+
| name | age | nameClosestAge |
+--------+-----+----------------+
| alice | 20 | |
| bob | 30 | |
| clive | 22 | |
| duncan | 24 | |
+--------+-----+----------------+
Чтобы заполнить столбец nameClosestAge именем человека, наиболее близкого по возрасту к каждому человеку, вы можете сделать это ...
create temporary table peopleTemp like people;
insert into peopleTemp select * from people;
update people set nameClosestAge =
(select name from peopleTemp where people.name != peopleTemp.name
order by abs(people.age - peopleTemp.age) asc limit 1);
Который производит это ....
+--------+-----+----------------+
| name | age | nameClosestAge |
+--------+-----+----------------+
| alice | 20 | clive |
| bob | 30 | duncan |
| clive | 22 | alice |
| duncan | 25 | clive |
+--------+-----+----------------+
Конечно, есть способ сделать это без создания дубликата таблицы.
Я ищу наиболее эффективный метод, поскольку у меня очень большая таблица, и ее обновление занимает слишком много времени.
Я использую mySql с PHP.