[英]Update query using select data
请先看看我的桌子:
[user_id,row_id,row_value]-表格:users_data
内容:
[1, 1, 1]
[2, 1, 2]
[3, 1, 2]
[4, 1, 2]
[1, 2, 1]
[2, 2, 1]
[3, 2, 1]
[4, 2, 1]
[2, 3, 5]
[2, 3, 5]
[2, 3, 5]
我想找出是否有可能仅通过使用MySQL语言自动执行这3个步骤:
步骤1:获取user_id = 1的row_id
的列表(所以[ row_id
]和[ row_id
])
步骤2:遍历该列表,找出从步骤1获得的列表中row_ids最流行的row_values
步骤3:遍历步骤2的结果,以使user_id = 1的row_value与大多数流行的row_values相同。
现在多数民众赞成我查询:
第1步:
SELECT row_id FROM users_data WHERE user_id = 1;
该查询的结果为2行:
[1]
[2]
步骤2:因此,现在从那两行中,应该以某种方式运行2个查询(填充了步骤1的数据):
SELECT row_id, row_value FROM users_data WHERE row_id = 1 GROUP BY row_value ORDER BY COUNT(row_value) LIMIT 1;
SELECT row_id, row_value FROM users_data WHERE row_id = 2 GROUP BY row_value ORDER BY COUNT(row_value) LIMIT 1;
第一个查询结果:
[1,2]
第二次查询结果:
[2,1]
步骤3:最后从那2行中,我想更新用户1 row_values。 因此,应执行以下操作:
UPDATE users_data SET row_value = 2 WHERE user_id = 1 AND row_id = 1;
UPDATE users_data SET row_value = 1 WHERE user_id = 1 AND row_id = 2;
所以我希望这些步骤能够自动完成(步骤2的步骤3的数据,步骤1的步骤2的数据),但是我不知道该怎么做(现在我可以用编程语言编写它或填充用记事本查询)。
以下是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
您的问题让我有些困惑,您想找到最“受欢迎”的行值,然后将Step 2
返回的所有行设置为它们? 但是,大多数“受欢迎”是什么意思? 如果您的意思是找到单个最受欢迎的row_value
,那么您似乎希望能够执行以下操作(希望这不是您的意思,应该可以给您一些想法):
user_id
= 1 SELECT row_id FROM users_data WHERE user_id = 1;
row_id
SELECT a.row_value
FROM (
SELECT COUNT(*), row_value
FROM users_data
WHERE user_id = 1
GROUP BY row_value
ORDER BY COUNT(*) DESC
LIMIT 1
) as a
UPDATE `users_data` SET row_values =
(
SELECT a.row_value
FROM (
SELECT COUNT(*), row_value
FROM users_data
WHERE user_id = 1
GROUP BY row_value
ORDER BY COUNT(*) DESC
LIMIT 1
)
as a)
WHERE user_id = 1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.