Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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 用于更新数据库记录的循环中的循环_Php_Mysql_Loops - Fatal编程技术网

Php 用于更新数据库记录的循环中的循环

Php 用于更新数据库记录的循环中的循环,php,mysql,loops,Php,Mysql,Loops,我有一个包含以下数据的交易表: dealID | date | followUP | user 1 |2012-10-15 | Yes | 2 |2012-12-24 | Yes | 3 |2013-01-05 | | 4 |2013-02-02 | Yes | 5 |2013-02-02 | Yes | 和一个包含

我有一个包含以下数据的交易表:

dealID   |   date    |   followUP  |  user
1        |2012-10-15 |    Yes      |
2        |2012-12-24 |    Yes      |
3        |2013-01-05 |             |
4        |2013-02-02 |    Yes      |
5        |2013-02-02 |    Yes      |
和一个包含我的用户列表的用户表

userID    | name
1         | john
2         | eric
3         | anne
我想做的是查询followUP设置为“YES”的第一个表,然后从结果中按照用户表中的顺序为它们分配一个用户,这样我的最终交易表将如下所示

dealID   |   date    |   followUP  | userID
1        |2012-10-15 |    Yes      | 1
2        |2012-12-24 |    Yes      | 2
3        |2013-01-05 |             |
4        |2013-02-02 |    Yes      | 3
5        |2013-02-02 |    Yes      | 1

我知道这是一个循环,但由于某些原因,我不知道如何设置第二个循环来分配用户的值。任何帮助都将不胜感激。

首先将您的用户ID放入一个数组中,使其看起来:

$uids = array(1, 2, 3);
然后,在从deals表读取记录时,编写如下更新查询:

$follow_up_user_idx = 0;
$update_queries = array();
while($row=mysqli_fetch_assoc($result)) {
    // ... do whatever you need to
    if($row['followUP'] != 'Yes') continue;
    $update_queries[] = "UPDATE `deals` SET `user` = '" . $uids[$follow_up_user_idx] . "'
                         WHERE `dealID` = '" . $row['dealID'] . "' LIMIT 1";
    $follow_up_user_idx++;
    if($follow_up_user_idx > count($uids) - 1) $follow_up_user_idx = 0;
}
现在您有了所有更新查询。只要执行它们:

foreach($update_queries as $uq) {
    mysqli_query($link, $uq);
}

首先将您的用户ID放入数组中,使其看起来:

$uids = array(1, 2, 3);
然后,在从deals表读取记录时,编写如下更新查询:

$follow_up_user_idx = 0;
$update_queries = array();
while($row=mysqli_fetch_assoc($result)) {
    // ... do whatever you need to
    if($row['followUP'] != 'Yes') continue;
    $update_queries[] = "UPDATE `deals` SET `user` = '" . $uids[$follow_up_user_idx] . "'
                         WHERE `dealID` = '" . $row['dealID'] . "' LIMIT 1";
    $follow_up_user_idx++;
    if($follow_up_user_idx > count($uids) - 1) $follow_up_user_idx = 0;
}
现在您有了所有更新查询。只要执行它们:

foreach($update_queries as $uq) {
    mysqli_query($link, $uq);
}

你必须遵循一系列步骤来实现你提到的目标

1从followUP为“是”的数据库中获取所有记录。 假设第一个表是deals。因此,获取followUP为“是”的所有记录。 比如说,您已经获得了$deals\u详细信息

2从数据库中获取所有usersname。 假设第二个表是用户。因此,获取所有用户。 比方说,所有用户名都在$users\u details数组中。 在单独的变量中获取系统中的总用户数,例如$users\u count

3循环浏览$deals\u details,并从$users\u details依次分配给每个用户


你必须遵循一系列步骤来实现你提到的目标

1从followUP为“是”的数据库中获取所有记录。 假设第一个表是deals。因此,获取followUP为“是”的所有记录。 比如说,您已经获得了$deals\u详细信息

2从数据库中获取所有usersname。 假设第二个表是用户。因此,获取所有用户。 比方说,所有用户名都在$users\u details数组中。 在单独的变量中获取系统中的总用户数,例如$users\u count

3循环浏览$deals\u details,并从$users\u details依次分配给每个用户


这可能是一个糟糕的设计决策。在不了解您的应用程序的情况下,我会尝试等待用户可用/请求交易,然后从队列中为他们分配下一个需要跟进的交易。即使您有足够的理由在用户可用之前分配用户,您也可以考虑在基于适当的业务逻辑(例如,维护要分配给下一个交易的用户队列)的交易创建/修改时这样做。 事实上,没有特别好的方法用一个简单的UPDATE语句来执行这个操作。纯粹在数据库中实现这一点的一种方法是使用一个存储过程,尽管它不是特别安全的并发性,因为在关闭和重新打开用户光标之间对用户表的更改可能会导致不良影响;出于本过程的目的,可以将用户复制到临时表中,具体取决于所需的逻辑:

分隔符// 创建过程开始 声明_userID,_dealidbigint UNSIGNED; 声明_done布尔值默认值为FALSE; 声明用户游标 选择用户ID 来自用户 按用户ID排序; 声明\u curDeal游标用于 选择交易ID 来自交易 其中followUP='是' 交易指令 更新; 找不到的声明继续处理程序 设置_done:=真; 从“更新交易集userID=”准备stmt?其中dealID=?'; 开放式用户; 公开交易; readDeal:LOOP 将"curDeal"提取到"deal id"中; 如果你做完了 离开readDeal; 如果结束; 将_curUser提取到_userID中; 如果你做完了 设置_done:=FALSE; 关闭用户; 开放式用户; 将_curUser提取到_userID中; 如果你做完了 信号SQLSTATE值“45000”已设置 MESSAGE_TEXT='无用户'; 离开readDeal; 如果结束; 如果结束; 设置@userID:=\u userID,@dealID:=\u dealID; 使用@userID、@dealID执行stmt; 结束循环读取处理; 关闭用户; 结束交易; 解除分配准备stmt; 结束// 定界符;
请参见。

这可能是一个糟糕的设计决策。在不了解您的应用程序的情况下,我会尝试等待用户可用/请求交易,然后从队列中为他们分配下一个需要跟进的交易。即使您有足够的理由在用户可用之前分配用户,您也可以考虑在基于适当的业务逻辑(例如,维护要分配给下一个交易的用户队列)的交易创建/修改时这样做。 事实上,没有特别好的方法用一个简单的UPDATE语句来执行这个操作。纯粹在数据库中实现它的一种方法是使用一个存储过程,尽管它不是特别安全的并发性,因为在c 丢失并重新打开_curUser光标可能会造成不良影响;出于本过程的目的,可以将用户复制到临时表中,具体取决于所需的逻辑:

分隔符// 创建过程开始 声明_userID,_dealidbigint UNSIGNED; 声明_done布尔值默认值为FALSE; 声明用户游标 选择用户ID 来自用户 按用户ID排序; 声明\u curDeal游标用于 选择交易ID 来自交易 其中followUP='是' 交易指令 更新; 找不到的声明继续处理程序 设置_done:=真; 从“更新交易集userID=”准备stmt?其中dealID=?'; 开放式用户; 公开交易; readDeal:LOOP 将"curDeal"提取到"deal id"中; 如果你做完了 离开readDeal; 如果结束; 将_curUser提取到_userID中; 如果你做完了 设置_done:=FALSE; 关闭用户; 开放式用户; 将_curUser提取到_userID中; 如果你做完了 信号SQLSTATE值“45000”已设置 MESSAGE_TEXT='无用户'; 离开readDeal; 如果结束; 如果结束; 设置@userID:=\u userID,@dealID:=\u dealID; 使用@userID、@dealID执行stmt; 结束循环读取处理; 关闭用户; 结束交易; 解除分配准备stmt; 结束// 定界符; 请在上查看。

表格用户 +--------+--------+------+ |用户id |用户名|用户级别| +--------+--------+------+ |1 |超级管理员|管理员| |2 |副管理员|管理员| |3队1队| |4队2队| |5队3队| |6 |客户1 |客户| |7 |客户2 |客户| |8 |客户3 |客户| |9 |客户4 |客户| +--------+--------+------+ 表投诉: +--------+--------+------+ |投诉号|投诉号|用户号| +--------+--------+------+ |1 |操作系统问题| 7| |2 | USB问题| 8| |3 |当前接受的操作系统| 7| |4 |房屋署问题| 9| |5 | DVD发行| 6| |6 | SW问题| 9| |7 |网络问题| 9| |8 |系统问题| 6| +--------+--------+------+ 表分配工作 +--------+------+ |投诉|用户| id| +--------+------+ | 1 | 3 | | 2 | 4 | | 3 | 5 | | 4 | 3 | | 5 | 4 | | 6 | 5 | | 7 | 3 | | 8 | 4 | +--------+------+

当客户提出投诉时,投诉数据也应保存在投诉表中 投诉id应同时保存在分配工作表中 用户id也会依次保存,从用户表中获取,用户表中只包含该人员id的团队。 我是ph值新手,请任何人帮助我。

表格用户 +--------+--------+------+ |用户id |用户名|用户级别| +--------+--------+------+ |1 |超级管理员|管理员| |2 |副管理员|管理员| |3队1队| |4队2队| |5队3队| |6 |客户1 |客户| |7 |客户2 |客户| |8 |客户3 |客户| |9 |客户4 |客户| +--------+--------+------+ 表投诉: +--------+--------+------+ |投诉号|投诉号|用户号| +--------+--------+------+ |1 |操作系统问题| 7| |2 | USB问题| 8| |3 |当前接受的操作系统| 7| |4 |房屋署问题| 9| |5 | DVD发行| 6| |6 | SW问题| 9| |7 |网络问题| 9| |8 |系统问题| 6| +--------+--------+------+ 表分配工作 +--------+------+ |投诉|用户| id| +--------+------+ | 1 | 3 | | 2 | 4 | | 3 | 5 | | 4 | 3 | | 5 | 4 | | 6 | 5 | | 7 | 3 | | 8 | 4 | +--------+------+

当客户提出投诉时,投诉数据也应保存在投诉表中 投诉id应同时保存在分配工作表中 用户id也会依次保存,从用户表中获取,用户表中只包含该人员id的团队。
我是ph新手,请任何人帮助我。

您将如何决定将哪个用户分配给哪个交易?您在deals表中没有任何用户标识?您希望根据使用情况按顺序为followUP='Yes'的交易分配一个用户
rID?现在只需将userID按顺序分配给users表。到目前为止,我唯一能做的就是更新deals表,但仅针对一个用户,我不知道如何在deals更新查询循环时循环用户ID。因此,用户表中的用户ID不是自动递增的??我的ID都是AI。是的,我想根据userid按顺序更新followUP='Yes'的交易表。您将如何决定将哪个用户分配给哪个交易?您在deals表中没有任何用户标识?您想根据用户标识按顺序为followUP='Yes'的交易分配用户吗?现在只需按顺序将用户标识分配给users表。到目前为止,我唯一能做的就是更新deals表,但仅针对一个用户,我不知道如何在deals更新查询循环时循环用户ID。因此,用户表中的用户ID不是自动递增的??我的ID都是AI。是的,我想根据userID按顺序更新followUP='Yes'的deals表