Если у вас есть все в базе данных и если вы действительно хотите сделать это в порядке, заданном таблицей Users_group_mapping, то вам следует добавить столбец последовательности в эту таблицу и создать новую таблицу Data
.Таким образом, у вас будет что-то вроде этого:
User Table :
userid, username, points
1 user1 10
2 user2 21
3 user3 7
4 user4 44
Users_group_mapping Table :
userid, usergroupid rowseq
1 1 1
2 2 2
4 2 3
4 1 4
4 3 5
Data Table :
usergroupid, points
1 40
2 80
3 100
, чем требуемый SQL, выглядит следующим образом:
UPDATE User
JOIN Users_group_mapping USING (userid)
JOIN Data on Data.usergroupid=Users_group_mapping.usergroupid
LEFT JOIN Users_group_mapping as x ON x.userid=User.userid and x.rowseq < Users_group_mapping.rowseq
SET User.points = User.points + Data.points
WHERE x.userid IS NULL
, если вы не хотите добавлять балловк уже существующим точкам, но установите их, чем, конечно, используйте
UPDATE User
JOIN Users_group_mapping USING (userid)
JOIN Data on Data.usergroupid=Users_group_mapping.usergroupid
LEFT JOIN Users_group_mapping as x ON x.userid=User.userid and x.rowseq < Users_group_mapping.rowseq
SET User.points = Data.points
WHERE x.userid IS NULL
РЕДАКТИРОВАТЬ
Вот решение, если вы не можете изменить структуру данных (php +mysql)
$userids[] = array();
$result = mysql_query("SELECT * FROM User");
while ($row = mysql_fetch_assoc($result)) {
$userids[] = $user_row['userid'];
};
foreach($userids as $userid) {
$result = mysql_query("SELECT usergroupid FROM Users_group_mapping WHERE userid = $userid");
$row = mysql_fetch_assoc($result)); # we only need first matching row so no cycle
$usergroupid = intval($row['usergroupid']);
$points = $dtArr[$usergroupid];
mysql_query("UPDATE User SET points = points + $points WHERE User.userid = $userid");
};
пожалуйста, обратите внимание, что, хотя код правильный, потому что это не так сложно решить, будут некоторые глупые ошибки (синтаксические ошибки и т. д.), так как у меня нет времени на его отладку,Но он должен дать вам ответ.