Heim > Backend-Entwicklung > PHP-Tutorial > 这样的递归如何做?

这样的递归如何做?

WBOY
Freigeben: 2016-06-13 12:59:42
Original
926 Leute haben es durchsucht

这样的递归怎么做?!

<br />
select a,<br />
(select b from c where ...) as d,<br />
e<br />
from f,(select j from h where ...) as i<br />
where ....<br />
Nach dem Login kopieren

我要把外层select ... from ...中,select后面的内容替换掉,而保留from后面的内容。最后变成:
<br />
select count(*)<br />
from f,(select j from h where ...) as i<br />
where ....<br />
Nach dem Login kopieren

其实这相当于xml/html节点的替换,类似递归问题,想了很久也没想到解决方法。
------解决方案--------------------
正则....不行

如果你只是想得到返回的行数, 你总是可以这样做:
select count(*) from (

-- 你的sql --<br /> select a,<br /> (select b from c where ...) as d,<br /> e<br /> from f,(select j from h where ...) as i<br /> where ....<br />
) tmp

如果你非要严格做替换, 要做语法分析, 考虑到单双引号, 括号等等....
------解决方案--------------------
不知道你是要写SQL指令,还是要做字符串替换
如果是做字符串替换,可以这么写
$s = <<< TXT<br />
select a,<br />
(select b from c where ...) as d,<br />
e<br />
from f,(select j from h where ...) as i<br />
where ....<br />
TXT;

$ar = preg_split('/(\(?\bselect\b
------解决方案--------------------
\bfrom\b)/i', $s, -1, PREG_SPLIT_NO_EMPTY
------解决方案--------------------
PREG_SPLIT_DELIM_CAPTURE);

$n = 0;
$st = array();
for($i=0; $i $t = strtolower($ar[$i]);
if($t == 'select'
------解决方案--------------------
$t == '(select') {
$st[] = $i;
}
if($t == 'from') {
if(count($st) == 1) break;
array_pop($st);
}
}
for($i--; $i>$st[0]+1; $i--) unset($ar[$i]);
$ar[$st[0]+1] = " count(*)\n";
echo join('', $ar);
Nach dem Login kopieren

select count(*)
from f,(select j from h where ...) as i
where ....

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage