php - 对mysql中多个用户拥有的记录进行计算

标签 php mysql stored-procedures

我需要帮助扩展功能更新查询,该查询对一条记录执行计算,以便不仅能够对数据库中的一条记录执行计算,而且能够对与特定用户关联的所有记录执行计算。

从功能上来说,我需要将“编辑此记录”扩展为“重新评估 user# 的​​所有记录?”

当前计算使用 3 个表,对一列求和,除以另一列的总和,然后根据该结果创建一个变量(有两列分别求和以创建两个变量)。然后我有一个简单的 UPDATE 查询来使用这些变量的值更新记录。每条记录都有不同的值,每个 id 的总和也会不同# @lastid是唯一的记录id。(allinfsds.id1) 我需要对所有 = 特定所有者 id (allinfsds.own_id) 的记录进行计算[即WHERE allinfsds.own_id= usernum]

有什么想法吗??? 提前致谢, 纳特

    CREATE TABLE `allingred` (
  `id6` int(8) NOT NULL auto_increment,
  `usernum` varchar(255) default NULL,
  `fsdsnum` int(8) unsigned zerofill NOT NULL,
  `mfdfsds` varchar(255) default NULL,
  `maybe` decimal(2,1) NOT NULL default '1.0',
  `amount` float(10,2) default NULL,
  `unit` int(6) default NULL,
  `name` varchar(255) default NULL,
  `wgt` int(9) NOT NULL,
  PRIMARY KEY  (`id6`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=38 ;

    CREATE TABLE `weight` (
  `NDB_No2` int(8) unsigned zerofill NOT NULL,
  `Seq` smallint(6) NOT NULL,
  `amt2` decimal(5,3) NOT NULL,
  `Msre_Desc` varchar(80) NOT NULL,
  `Gm_Wgt` decimal(7,1) NOT NULL,
  `Num_Data_Pts` tinyint(4) default NULL,
  `Std_Dev` decimal(7,1) default NULL,
  `uni` int(7) NOT NULL auto_increment,
  PRIMARY KEY  (`uni`),
  KEY `fb_join_NDB_No2_INDEX` (`NDB_No2`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=21731 ;

    CREATE TABLE `allinnot2` (
  `NDB_No` int(8) unsigned zerofill NOT NULL,
  `Water` decimal(10,2) default NULL,
  `Energ_Kcal` decimal(10,0) default NULL

    CREATE TABLE `allinfsds` (
  `id1` int(8) unsigned zerofill NOT NULL,
  `own_id` int(11) NOT NULL
  UNIQUE KEY `id` (`id1`),
  KEY `fb_groupbyorder_item_number_INDEX` (`item_number`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


    SET @cal = (SELECT SUM( Energ_Kcal * allingred.amount * Gm_Wgt) / SUM( allingred.amount * Gm_Wgt ) AS nut100
FROM  `allingred` 
LEFT JOIN weight ON allingred.unit = weight.uni
LEFT JOIN allinnot2 ON allingred.mfdfsds = allinnot2.NDB_No
LEFT JOIN allinfsds ON allingred.fsdsnum = allinfsds.own_id
WHERE fsdsnum = @lastid)

SET @prot = (SELECT SUM(Protein * allingred.amount * Gm_Wgt) / SUM( allingred.amount * Gm_Wgt ) AS nut100
FROM  `allingred` 
LEFT JOIN weight ON allingred.unit = weight.uni
LEFT JOIN allinnot2 ON allingred.mfdfsds = allinnot2.NDB_No
WHERE fsdsnum = @lastid)

UPDATE `allinnot2` SET
  `Energ_Kcal` = @cal,
  `Protein` = @prot
WHERE `NDB_No` = @lastid

最佳答案

如何一次更新多个元组

如果您有要更新的 ID 列表,请使用

UPDATE `myTable` SET `myColumn` = 'newValue' 
WHERE `userId` IN (
    /*list of relevant Ids for instance: */ 15, 20, 63, 987
)

或者,如果您没有此列表,但可以在数据库中查询此列表,请使用

UPDATE `myTable` SET `myColumn` = 'newValue' 
WHERE `userId` IN (
    SELECT `userId` FROM `myOtherTable` WHERE `relevantColumn` = 'value'
)

请注意,不允许在子选择中使用同一个表作为更新目标和 ids 源,因此 myTable != myOtherTable

关于php - 对mysql中多个用户拥有的记录进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9985853/

相关文章:

c# - WinForms和SQL Server,将存储过程添加到database.mdf?

javascript - 来自 PHP/MySQL 数据的 c3js 图用于多系列直方图

php - 数据库设计: join with uid or with two fields

mysql - 有没有办法为某一列选择一定数量的行?

sql - 具有从属表的存储过程不存在

sql-server - 多表复杂实体的乐观并发

php - 在 WordPress 中回显 PHP 中的 HTML

php - 有没有办法通过 PHP 自动将 XML 页面转换为 JSON?

android - 无法将 MySQL Workbench 连接到 Google Cloud SQL 实例

mysql - 如何避免在 MySql 中存储默认日期(1970-01-01)