gpt4 book ai didi

php - 将 php 循环转换为简单的 MySQL 查询

转载 作者:可可西里 更新时间:2023-11-01 08:30:40 25 4
gpt4 key购买 nike

对不起,如果这是一个愚蠢的问题。感谢您的宝贵时间。我四处搜索并找到了类似的问题/答案 - 但没有找到我正在寻找的东西。

我习惯于通过 PHP 执行所有 MySQL 调用 - 但最近 - 我接到了一个任务,要处理一个包含 5000 000 条股票经纪人记录的非常大的数据库表。我的 PHP 工作正常 - 但需要 HOURS 才能完成。认为使用简单的 MySQL 调用会快得多……我迷失了“简单”。

我的表:

| ID | My_Stockbroker | My_Start_Date | My_End_Date | POST_SIZE |
| 1 | DAVE | 2000-06-19 | 2000-06-19 | 2 |
| 2 | DAVE | 1999-03-02 | 2002-09-06 | 0 |
| 3 | DAVE | 1999-03-14 | 2002-12-10 | 0 |
| 4 | SAM | 2000-06-19 | 2000-06-19 | |

更新的目标表是 My_Table - 我想更新 My_Table` 上的所有 POST_SIZE' 值






我的 PHP 非常简单:




  • POST_SIZE 最初是空白

  • 从 My_Table = "DAVE"中获取一个 My_Stockbroker 名称

  • 计算 My_Table 中 = "DAVE"且在特定日期范围内的任何其他记录(不包括正在处理的记录)
    IE。
    My_Table.My_Start_Date < "ID1".My_Table.My_Start_Date && My_Table.My_End_Date > "ID1".My_Table.My_Start_Date POST_SIZE++;



我的 PHP 代码是这样的:



// Get 1 record
$sql = "SELECT `ID`, ` My_Stockbroker`, `My_Start_Date`, from `".$Table."` WHERE ` My_Stockbroker` != '' AND `POST_SIZE` = '' LIMIT 1"; //

while($row = $result->fetch_assoc()){// while 1 record result
$ My_Stockbroker_To_Examin_ID = $row["ID"];
$ My_Stockbroker_To_Examin = $row[" My_Stockbroker"];
$ My_Stockbroker_To_Examin_My_Start_Date = $row["My_Start_Date"];
}

/////// GET ALL RECORDS FOR SPECIFIC My_Stockbroker that fall within specific date ///////
$sql = "SELECT `ID` FROM `".$Table."` WHERE `My_Start_Date` <
'".$My_Stockbroker_To_Examin_My_Start_Date."' AND `My_End_Date` >
'".$My_Stockbroker_To_Examin_My_Start_Date."' AND `My_Stockbroker` =
'".$My_Stockbroker_To_Examin."' AND `ID` != '".$ My_Stockbroker_To_Examin_ID ."'"; //

if($result = $conn->query($sql)){//
$POST_SIZE = $result->num_rows;
}

// now write back the number of rows found
$sql = "UPDATE `".$Table."` SET `POST_SIZE` = '".$POST_SIZE."', WHERE `ID` = '".$My_Stockbroker_To_Examin_ID."'; ";

正如我所说 - 我的 PHP 代码运行完美。我只是没有时间等待它完成。

如何仅使用 MySQL 在一张表上实现这一目标?

读取一条记录/计算日期范围内的所有记录/将值写入POST_SIZE

我是否需要即时创建一堆临时表,并加入等等?或者这可以在 MySQL 循环中实现吗?MySQL 通常单独运行更快吗? - 还是我的 PHP 有问题?

最佳答案

我没试过这个sql,不过应该是这样的

UPDATE My_Table set Post_size = (SELECT COUNT(ID) FROM My_Table 
WHERE ID <> My_Stockbroker_To_Examin_ID
AND My_Start_Date < My_Stockbroker_To_Examin_My_Start_Date
AND My_End_Date > My_Stockbroker_To_Examin_My_Start_Date
AND My_Stockbroker = My_Stockbroker_To_Examin)

您可以用所需的值替换这些变量。

关于php - 将 php 循环转换为简单的 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27608463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com