请先看看我的 table :
[user_id、row_id、row_value] - 表:user_data
内容:
row_id 1:
[1, 1, 1]
[2, 1, 2]
[3, 1, 2]
[4, 1, 2]
row_id 2:
[1, 2, 1]
[2, 2, 1]
[3, 2, 1]
[4, 2, 1]
row_id 3:
[2, 3, 5]
[2, 3, 5]
[2, 3, 5]
我想知道是否可以仅使用 MySQL 语言自动完成这 3 个步骤:
第1步:获取user_id = 1的row_id
列表(因此[1, 1, 1]和[1, 2, 1])
第 2 步:迭代该列表,找出仅适用于从第 1 步获得的列表中的 row_ids 的最流行的 row_values
第3步:迭代第2步的结果,使user_id的row_values = 1,与最流行的row_values相同。
现在这就是我所做的查询:
第 1 步:
从 users_data 中选择 row_id,其中 user_id = 1;
该查询的结果是 2 行:
[1]
[2]
第 2 步:现在从这两行中,应该以某种方式运行 2 个查询(填充第 1 步的数据):
从用户数据中选择 row_id、row_value WHERE row_id = 1 GROUP BY row_value ORDER BY COUNT(row_value) LIMIT 1;
从用户数据中选择 row_id、row_value WHERE row_id = 2 GROUP BY row_value ORDER BY COUNT(row_value) LIMIT 1;
第一个查询的结果:
[1, 2]
第二次查询的结果:
[2, 1]
第 3 步:最后,我想从这两行中更新用户 1 row_values。所以应该运行这样的事情:
更新 users_data SET row_value = 2 WHERE user_id = 1 AND row_id = 1;
更新 users_data SET row_value = 1 WHERE user_id = 1 AND row_id = 2;
所以我希望这些步骤能够自动完成(步骤3的数据取自步骤2,步骤2的数据取自步骤1),但我不知道如何制作它(现在我可以在编程中编写它)语言或用记事本填写查询)。
以下是 SQLFiddle 中的查询:http://sqlfiddle.com/#!9/8d5594/14
最佳答案
不确定你在做什么,但这似乎可以做到这一点:
UPDATE users_data u_old
JOIN (
SELECT DISTINCT u1.user_id, u2.row_id, u2.row_value
FROM users_data u1
JOIN users_data u2 USING(row_id)
WHERE u1.user_id = 1
AND u2.row_value = (
SELECT u3.row_value
FROM users_data u3
WHERE u3.row_id = u2.row_id
GROUP BY u3.row_value
ORDER BY COUNT(u3.row_value) DESC
LIMIT 1
)
) u_new USING (user_id, row_id)
SET u_old.row_value = u_new.row_value
关于php - 使用选择数据更新查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36627309/