Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.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
MYSQL PHP查询已查询数据(过滤已过滤数据)_Php_Mysql_Filter - Fatal编程技术网

MYSQL PHP查询已查询数据(过滤已过滤数据)

MYSQL PHP查询已查询数据(过滤已过滤数据),php,mysql,filter,Php,Mysql,Filter,我有一个复杂的查询,返回30000多条记录。我们一次向用户显示100条记录,用户必须单击“下一步”才能获得下100条记录 这里的问题是,我们再次对数据库运行复杂的查询,并添加限制100200来获取接下来的100条记录 除此之外,我们在客户端还有其他过滤器,必须对30000条记录执行过滤。数据库中大约有100000个用户。因此,对于每个活动,我们都在一次又一次地运行复杂的查询 有没有办法保存30000条记录并在其上运行操作?我检查了临时MYSQL表。但我认为我们不能在这种情况下使用它们。要将数据存

我有一个复杂的查询,返回30000多条记录。我们一次向用户显示100条记录,用户必须单击“下一步”才能获得下100条记录

这里的问题是,我们再次对数据库运行复杂的查询,并添加限制100200来获取接下来的100条记录

除此之外,我们在客户端还有其他过滤器,必须对30000条记录执行过滤。数据库中大约有100000个用户。因此,对于每个活动,我们都在一次又一次地运行复杂的查询

有没有办法保存30000条记录并在其上运行操作?我检查了临时MYSQL表。但我认为我们不能在这种情况下使用它们。要将数据存储在物理表中并对其进行查询,如果有1000个用户试图一次访问这个未来并以编程方式处理它(插入和删除操作),这将是一个大麻烦

更新以提供更多详细信息

->这是一个确切的场景,汽车公司希望看到给定距离内的所有汽车,例如距离给定纬度和经度100英里半径的汽车和用户详细信息。完成此操作后,combox将显示汽车型号,并在该数据表下方显示所有信息。在每列的顶部还有一个文本字段,用于在该列上搜索(例如,在客户名称上,输入两个字母开始过滤数据)。 1) 让城市在100英里内 2) 查询数据库(此处合并5个表) 3) 从上面的查询中获取汽车型号列表,并将其显示在列表框中 4) 向用户显示100条记录 5) 基于copbox列表和每列上的文本字段进行筛选

很简单:) -->

谢谢你的帮助

问候


Kiran

我公司的应用程序处理了200多万条记录和大量连接,我们非常优雅地处理了这个问题。是的,这是前端技术……但是用户、数据表和查询之间的交互使它成为一个真正优雅的解决方案。除了索引表之外,我们根本不做任何视图或存储过程,而且它工作起来非常灵活

DataTables是一个网格——一个具有额外功能的表,包括排序、分页、过滤等。它一次通过Ajax、X获取数据,并向查询中添加额外的元素以实现额外的功能。当你使用一种叫做“流水线”的功能时,它会在你显示的数据之前和之后捕获数据,从而减少查询量,同时给用户一个更快的查看体验。它是一个内置功能,非常容易部署

下面是关于管道的tut:

下面是我使用的查询示例:

public static function getQueue( $q=false) {
            $connect = new db_connection();

            $query  = ' SELECT something
                                    FROM table
                        WHERE 1 ';

            if ($q['id']) {
                $query .= " AND id = ".$q['id']." ";
            }

            if ($q['sortOrder']) {
                $query .= "ORDER BY " . $q['sortField']. " " .$q['sortOrder']. " ";
            }

            if ($q['limit']) {
                $query .= ' LIMIT '.$q['limit'];
            }

            if ($q['offset']) {
                $query .= ' OFFSET '.$q['offset'];
            }

            $result = $connect->query($query);
            $queue_array = $connect->fetchAll($result);

            return $queue_array;

        }
如果您以前从未使用过jQueryAjax,那么它将在字符串中查找结果。因此,我有一个页面,它使用上面的查询调用下面的函数来回显结果。我称之为我的ajaxDispatcher:

public static function showQueue($info) {

            $q['limit'] = $info['iDisplayLength'];
            $q['offset'] = $info['iDisplayStart'];

            //Ordering
            if ( isset( $info['iSortCol_0'] ) )  {
              for ( $i=0 ; $i < $info['iSortingCols']; $i++ ) {
                  $q['sortField'] .= self::queueHeaders($info['iSortCol_'.$i]);
                  $q['sortOrder'] .= $info['sSortDir_'.$i];
              }
            }

            $callqueue = self::getQueue($q);                    //Gets results with dependencies
            $prospect_count = self::getCount();                 //Gets total record count

            $string = '{"sEcho": '.intval($_REQUEST['sEcho']).', "iTotalRecords": '.intval($prospect_count).', "iTotalDisplayRecords": '.(int)$prospect_count.', "aaData":[';


            foreach ($callqueue as $c ) {
                $locked = ($c['locked'] == 1)?'<input type="checkbox" checked disabled>':'<input type="checkbox" disabled>';
                $scheduled_date = ($c['callback_date_time'])?date("M d Y g:ia", strtotime($c['callback_date_time'])):'';

                if ($count != 0)  $midstring .= "," ;
                $midstring .= '["'.$c['priority'].'", "'.addslashes($locked).'", "'.$scheduled_date.'", "'.$c['company_name'].'", "'.$c['marcom_name'].'", "'.$c['marcom_description'].'"]';
                $count++;
            }

            $endstring .= ']}';

            $finalstring = $string.$midstring.$endstring;

            return $finalstring;

     }
公共静态函数showQueue($info){
$q['limit']=$info['iDisplayLength'];
$q['offset']=$info['iDisplayStart'];
//订购
如果(isset($info['iSortCol_0'])){
对于($i=0;$i<$info['iSortingCols'];$i++){
$q['sortField'].=self::queueHeaders($info['iSortCol.'$i]);
$q['sortOrder'].=$info['sortdir'.$i];
}
}
$callqueue=self::getQueue($q);//获取具有依赖项的结果
$prospect_count=self::getCount();//获取记录总数
$string='{“sEcho”:.intval($_请求['sEcho']),“iTotalRecords:”.intval($prospect_count.),“iTotalDisplayRecords:”。(int)$prospect_count.,“aaData:”;
foreach($callqueue作为$c){
$locked=($c['locked']==1)?“”:“”;
$scheduled_date=($c['callback_date_time'])?日期(“mdy g:ia”,strottime($c['callback_date_time']):”;
如果($count!=0)$midstring.=“,”;
$midstring.='[“.$c['priority'.]”、“.addslashes($locked)”、“.$scheduled_date.”、“.$c['company_name'.]”、“.$c['marcom_name'.]”、“.$c['marcom_description'.]”等等;
$count++;
}
$endstring.=']}';
$finalstring=$string.$midstring.$endstring;
返回$finalstring;
}

当我最终弄明白这一切时,这个工具改变了我们公司的游戏规则。我们从一个(设计拙劣的)手动分页系统发展到ajax调用和交互性,这一切都改变了用户体验。在某种程度上,你是在通过查询和交互的间隔来“欺骗”用户……但它确实有效。

我可以推荐以下方法来处理许多数据搜索


当用户第一次发出搜索时,查询记录的ID,匹配他的所有过滤器。然后,每次需要呈现页面时,使用limit子句在数据库中查询具有这些ID的记录。这将显著降低数据库负载,因为您不需要一次又一次地应用过滤器,只需按记录的主键选择记录。

我很想看看这方面的解决方案,因为我经常遇到此类问题。你有没有查看过视图?谢谢Dan的评论,请查看我的最新问题。我认为视图在这种情况下对我没有帮助,谢谢@bpeterson76。我尝试了Jquery数据表。但对于我的情况,我需要一些服务器端的解决方案,以避免再次查询数据库。好的,管道将把您的查询减半。我认为这是一个很好的改进…它将工作从服务器推到用户身上。谢谢@FractalizeR。你能详细说明你的答案吗?我用更多的细节更新了我的问题。Th