Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL跨表更新_Php_Mysql - Fatal编程技术网

Php MySQL跨表更新

Php MySQL跨表更新,php,mysql,Php,Mysql,我有一个用户表和一个销售表 用户表中有id列和年度计划长度列、月度计划长度列 示例用户行: id |年度|计划长度|月度|计划长度 55 | 0 | 0 sales表包含列id、用户id、产品id 示例销售行: id |用户| id |产品 1 | 55 |月 每年2 | 55 | 我正在尝试编写一个查询,根据用户使用sales表进行的购买量来更新users plan length列 以下是我目前得到的信息: function updateLength($product, $column) {

我有一个用户表和一个销售表

用户表中有id列和年度计划长度列、月度计划长度列

示例用户行:

id |年度|计划长度|月度|计划长度

55 | 0 | 0

sales表包含列id、用户id、产品id

示例销售行:

id |用户| id |产品

1 | 55 |月

每年2 | 55 |

我正在尝试编写一个查询,根据用户使用sales表进行的购买量来更新users plan length列

以下是我目前得到的信息:

function updateLength($product, $column) {
  global $emdb;

  mysql_query("UPDATE users
            JOIN sales
            ON sales.user_id = users.id
            SET users.`".mysql_real_escape_string($column)."` = count(sales.id) GROUP BY sales.user_id
            WHERE sales.product = '".mysql_real_escape_string($product)."'", $emdb);

}

updateLength('monthly', 'annual_plan_length');
updateLength('annually', 'monthly_plan_length');
此查询不起作用,但在您的帮助下,用户ID为55的“月度计划长度”和“年度计划长度”列应最终显示为1

注:我知道PDO更好,但它还没有用于这个客户的项目。 注:GROUP BY附近的语法错误

您不能在update语句中使用JOIN。而是使用嵌套的SELECT查询来获取计数:

UPDATE table SET field = (SELECT COUNT(some_other_filed)
FROM other_table WHERE your_field = condition)
您只能在查询结束时使用GROUP BY。我在您的查询中看到一个问题,因为您希望更新拥有相同产品但具有不同购买值的每个用户

您需要按删除分组

也许它能帮助你:

更新用户 参加销售 ON sales.user_id=users.id SET users.annual_plan_length=从sales中选择countuser_id,其中user_id=1,其中sales.product=‘monthly’


因为编辑应该是6个字符,所以我是这样做的:我将参数放在正确的位置。

您可以首先在子查询中计算结果,然后更新所有用户的数据

请尝试以下查询:

UPDATE (SELECT `user_id`, SUM(IF(`product` = 'monthly', 1, 0)) AS `monthly`, SUM(IF(`product` = 'annually', 1, 0)) AS `annually` FROM `sales` WHERE 1 GROUP BY `user_id`) AS `s`
INNER JOIN `users` AS `u` ON `u`.`id` = `s`.`user_id`
SET `u`.`annual_plan_length` = `s`.`annually`, `u`.`monthly_plan_length` = `s`.`monthly`

至少修复QueryTanks中“.$”列上的SQL注入。我不知道这可能是一个问题,因为输入只来自我自己的代码。你能告诉我这是如何注入的吗?这个查询不起作用,你有错误吗?用=0或=0注入会很有趣,因为-and是有效的mysql注释。说我在GROUP BY附近有语法错误,你不能在update语句中使用JOIN,错了,你可以在update查询中使用JOIN。@Odysey1111你会如何使用它呢特别是我的问题?