gpt4 book ai didi

php - Preg_replace() 删除除查询结尾以外的所有内容

转载 作者:行者123 更新时间:2023-11-29 02:24:47 27 4
gpt4 key购买 nike

首先,抱歉我的英语不好。

我有这个问题:

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

关于如何解决这个问题有什么想法吗?

最佳答案

解决此问题的更好方法是使用 MySQL 的内置功能:

您只需添加 SQL_CALC_FOUND_ROWSSELECT 关键字后结合函数 FOUND_ROWS :

SELECT SQL_CALC_FOUND_ROWS 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

要在没有 LIMIT 子句的情况下获取行数,您现在可以使用语句

SELECT FOUND_ROWS();

作为下一个查询。

正则表达式方法的问题是要使正则表达式正确。匹配通常是贪心的,它会尽可能匹配。在这种情况下,它将恰好匹配 WHERE 子句的最后一个条件,因为该条件使用带有 FROM 关键字的子选择。因为那个模式

SELECT (.*) FROM

$queryQtd = preg_replace("/SELECT (.*) FROM /sei", "'SELECT COUNT(*) as qtd FROM '", $queryQtd);

匹配的不仅仅是 SELECT 的字段列表(它也包含一个带有 FROM 的子选择)。

关于php - Preg_replace() 删除除查询结尾以外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24538115/

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