怎麼實現從資料查詢資料的時候判斷如果資料大於N條分次查詢 遞迴嗎?
例如資料庫有300000條資料 現在根據條件查詢符合的有30000條資料 一次取太多了可能慢或其他問題 我想每次取10000 三次取完 這只是個例子 應該怎麼實現啊?用遞迴嗎?
告知下 謝謝! ! !
還有就是如果查倆張表的資料 合併在一起 還有辦法排序嗎根據某個欄位?
回覆內容:
例如資料庫有300000條資料 現在根據條件查詢符合的有30000條資料 一次取太多了可能慢或其他問題 我想每次取10000 三次取完 這只是個例子 應該怎麼實現啊?用遞迴嗎?
告知下 謝謝! ! !
還有就是如果查倆張表的資料 合併在一起 還有辦法排序嗎根據某個欄位?
謝邀,對於資料量較大的結果集,我目前一般會採用以下兩種方式處理。採用這兩種方式處理的目的是:一是減少資料集取得時頻寬資源的佔用,二是減少程式對結果集處理時記憶體的使用。
分塊,就是題主的思路
<code>$sql = 'SELECT xxx FROM table WHERE xxx LIMIT limit :limit offset :offset'; $limit = 10000; $offset = 0; do{ $stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $stmt->execute(array(':limit' => $limit, ':offset' => $offset)); $data = $stmt->fetchAll(); // 处理逻辑 $offset += $limit; }while(count($data));</code>
遊標,按行讀取回傳
<code>$sql = 'SELECT xxx FROM table WHERE xxx'; $stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL)); $stmt->execute(); $row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_LAST); do { // 处理逻辑 $row } while ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_PRIOR));</code>
個人建議當你要找後面的分塊的時候,用where
條件而不是直接limit 100000 , 100000
:
二者區別舉例如下:
<code>//这个是第一种,取第20w开始的10w条数据 select * from table limit 100000 , 100000 order by id //这是第二种取法 select * from table where id > 100000 limit 100000 order by id 因为mysql用limit越往后,排序之后取后面的越慢</code>
直接透過sql語句就能搞定呀,不需要後台處理;可以排序呀,根據你指定欄位order by
就行了
連表查詢
例如:SELECT a.* from tableA as a, tableB as b where a.id = b.id order by a.id desc limit 0,10000";
你可以先select count(1) from table where 條件。看看總共有多少數據。大於N條的時候,
你再select * from table limit m,n
分頁查詢
2張表的話就select * from table1 union all select * form table2 order by 某個欄位
。注意查詢的列數量要一樣。最好類型也是一樣
假設表id均勻分佈的情況下,可以利用ID的區間來分段查詢資料
//每次计划读取的数据条数 $max_per_size = 10000; //找到符合条件的最小ID和最大ID $sql = "SELECT min(id),max(id) AS max_id AS num FROM `table` WHERE xx='xx'"; $stmt = $pdo->prepare($sql); $stmt->execute(); $res = $stmt->fetch(PDO::FETCH_ASSOC); //符合条件的最大ID $max_id = $res['max_id']; //符合条件的最小ID $min_id = $res['min_id']; $times = ceil(($max_id - $min_id + 1) / $max_per_size); //第一次的ID区间 $current_min_id = $min_id; $current_max_id = $min_id + $max_per_page; for($i = 0; $i<$times; $i++) { //生成SQL语句 $sql = "SELECT * FROM `table` WHERE xx='xx' AND (id>= {$current_min_id} AND id <= {$current_max_id})"; //得到数据之后的操作 //......... //重新计算下一次的ID区间 $current_min_id = $current_max_id + 1; $current_max_id = $current_max_id + $max_per_page; if ($current_max_id > $max_id) { $current_max_id = $max_id; } }

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

在開發一個小型應用時,我遇到了一個棘手的問題:需要快速集成一個輕量級的數據庫操作庫。嘗試了多個庫後,我發現它們要么功能過多,要么兼容性不佳。最終,我找到了minii/db,這是一個基於Yii2的簡化版本,完美地解決了我的問題。

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。
