Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.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 Preg_replace()删除除查询结束外的所有内容_Php_Mysql_Regex_Pagination - Fatal编程技术网

Php Preg_replace()删除除查询结束外的所有内容

Php Preg_replace()删除除查询结束外的所有内容,php,mysql,regex,pagination,Php,Mysql,Regex,Pagination,首先,对不起我的英语不好 我有一个疑问: SELECT t1.*,(SELECT COUNT(*) FROM table_a t2 WHERE t1.id=t2.id_c AND t2.status=1) AS aula FROM table_c t1 WHERE t1.status=1 AND t1.id IN (SELECT t3.id_c FROM table_cu t3 WHERE t3.id_c=t1.id AND t3.id_u=1) AND t1.id IN (SELECT

首先,对不起我的英语不好

我有一个疑问:

SELECT t1.*,(SELECT COUNT(*) FROM table_a t2 WHERE t1.id=t2.id_c AND t2.status=1) AS aula 
FROM table_c t1 
WHERE t1.status=1 
AND t1.id IN (SELECT t3.id_c FROM table_cu t3 WHERE t3.id_c=t1.id AND t3.id_u=1) 
AND t1.id IN (SELECT t4.id_c FROM table_cp t4 WHERE t4.id_c=t1.id AND t4.id_p=3) 
LIMIT 0,25
这个查询返回一组结果,到目前为止没有问题,但是我有一个分页类,它有一个非常基本的过程:它计算我得到了多少个条目,然后它将条目分成几部分,然后用这个值分页

问题在“分页类”中的此方法内部,代码如下:

function total_entries()
{

    $db = new db(DB_USER, DB_PASS, DB_NAME, DB_HOST);

    $qtdEntries = 0;

    $queryQtd = $this->sql;
    $queryQtd = preg_replace("/SELECT (.*) FROM /sei", "'SELECT COUNT(*) as qtd FROM '", $queryQtd);
    $queryQtd = preg_replace("/ORDER BY (.+)/", "", $queryQtd);
    $queryQtd = preg_replace("/LIMIT (.+)/", "", $queryQtd);

    $resultAll = $db->get_row($queryQtd); //Gets the result, in this case, it returns the number of entries

    if($resultAll){
        $qtdEntries = $resultAll->entries; //Number of entries
    }

    return $qtdEntries;
}
基本上,当我运行此方法时,其中的查询返回如下:

SELECT COUNT(*) as qtd FROM table_cp t4 WHERE t4.id_c=t1.id AND t4.id_p=3)
SELECT COUNT(*) as qtd FROM table_c t1 WHERE t1.status=1
当它应该返回如下内容时:

SELECT COUNT(*) as qtd FROM table_cp t4 WHERE t4.id_c=t1.id AND t4.id_p=3)
SELECT COUNT(*) as qtd FROM table_c t1 WHERE t1.status=1

有没有解决这个问题的方法?

解决这个问题的更好方法是使用MySQLs内置功能:

您只需在
选择
关键字后添加以下功能:

要在没有
LIMIT
子句时获取行数,现在可以使用以下语句

SELECT FOUND_ROWS();
作为下一个查询

regexp方法的问题是如何正确使用regexp。匹配通常是贪婪的,它会尽可能地匹配。在这种情况下,它将恰好匹配
WHERE
子句的最后一个条件,因为该条件使用带有
FROM
关键字的subselect。正因为如此,这种模式

SELECT (.*) FROM


与SELECT的字段列表(也包含带有
FROM
的子SELECT)匹配的远不止这些

我只是不明白,你想做什么,但也许结合函数可以为你的分页目标提供更好的方法。好的,让我试着解释一下:我有一个查询,我想计算它返回给我的行数,如果可能的话,使用接近我已有的内容。如果您使用的是
LIMIT
子句,则只需将
SQL\u CALC\u FOUND\u ROWS
SELECT FOUND\u ROWS()结合使用即可
如果您没有使用
LIMIT
子句,那么只需使用subselect
SELECT COUNT(*)FROM(您的第一个查询在这里)
。如果你的查询速度慢,那么这个(和你的)方法会使问题加倍。你能用我帖子的第一个查询发布我如何使用
SQL\u CALC\u FOUND\u ROWS
FOUND\u ROWS()
,这样我就能把你的答案标记为正确吗?谢谢。我不知怎么地忽略了你最初的问题。你遇到的问题是模式的贪婪。模式尽可能匹配,因此正好匹配到
WHERE
子句中的子选择中