php - 使用选择数据更新查询

标签 php mysql

请先看看我的 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

http://sqlfiddle.com/#!9/116ab0/3

关于php - 使用选择数据更新查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36627309/

相关文章:

php - 在多列中查找搜索词

php - 为不同的categoryID设置不同的列宽

python - 如何在不抛出错误的情况下避免 MySQL 数据库中的重复条目

php - 直接使用 $_POST ["x"] 还是复制到局部变量然后使用?

php - Laravel-Eloquent-Adding record to MySQL : Building dynamic eloquent insert command, 并在第一列返回 "Column Not Found"

php - 成功验证表单后,如何让我的 ajax 表单将验证码验证注入(inject)浏览器?

mysql - 在 SQL : but I get only one row instead of 2? 中查找重复项

mysql - Flask 中剩余查询参数的模式

java - 如何使用 java 设置完整的日期和时间 sql,而不仅仅是日期?

sql - 连接更新的 MySQL 语法