<?php $sql="SELECT [t2.col1] FROM [(SELECT col1, col2 FROM t1 WHERE 1 = 1 ORDER BY col1) t2] WHERE [t2.col1 = 1 AND t2.col2 IN SELECT t1.col1 FROM t1 WHERE t1.col1 = 1)] GROUP BY [t2.col1] ORDER BY [t2.col1]";preg_match_all("/\[[^\]]*\]/", $sql, $arr1); preg_match_all("/\[([^\]]*)\]/", $sql, $arr2);echo "<pre>"; print_r($arr1); print_r($arr2); echo "</pre>"; ?>
<?php $sql="SELECT [t2.col1] FROM [(SELECT col1, col2 FROM t1 WHERE 1 = 1 ORDER BY col1) t2] WHERE [t2.col1 = 1 AND t2.col2 IN SELECT t1.col1 FROM t1 WHERE t1.col1 = 1)] GROUP BY [t2.col1] ORDER BY [t2.col1]";preg_match_all("/\[[^\]]*\]/", $sql, $arr1); preg_match_all("/\[([^\]]*)\]/", $sql, $arr2);echo "<pre>"; print_r($arr1); print_r($arr2); echo implode(" ", $arr1[0]); echo "\n"; echo implode(" ", $arr2[1]); echo "</pre>"; ?>
to zhiin() ouk.cn () SELECT [t2.col1] FROM [(SELECT col1, col2 FROM t1 WHERE 1 = 1 ORDER BY col1) t2] WHERE [t2.col1 = 1 AND t2.col2 IN SELECT t1.col1 FROM t1 WHERE t1.col1 = 1)] GROUP BY [t2.col1] ORDER BY [t2.col1] 是合法的sql语句吗?正确的应该是: SELECT t2.col1 FROM (SELECT col1, col2 FROM t1 WHERE 1 = 1 ORDER BY col1) t2 WHERE t2.col1 = 1 AND t2.col2 IN (SELECT t1.col1 FROM t1 WHERE t1.col1 = 1) GROUP BY t2.col1 ORDER BY t2.col1楼主加上“[]”只是为了便于说明需求
呵呵,zhiin() ouk.cn要认真阿,呵呵,做作业题一样的去做可不行啊。:)
给你一个测试例供参考。要知道,事情远没有这么简单! <?php $sql =<<< SQL SELECT t2.col1 FROM (SELECT col1, col2 FROM t1 WHERE 1 = 1 ORDER BY col1) t2 WHERE t2.col1 = 1 AND t2.col2 IN (SELECT t1.col1 FROM t1 WHERE t1.col1 = 1) GROUP BY t2.col1 ORDER BY t2.col1 SQL;function fifo($v='') { static $st = array(); if($v == '' || $v[1] == '_ST_') return array_shift($st); else { array_push($st,$v[0]); return '_ST_'.count($st).'_'; } }$sql = preg_replace_callback("/\(.+\)/U","fifo",$sql); preg_match_all("/(select)(.+)(from)(.+)(where)(.+)(group by)(.+)(order by)(.+)/is",$sql,$regs);for($i=1;$i<count($regs);$i+=2) echo "{$regs[$i][0]}:".preg_replace_callback("/(_ST_)\d+_/","fifo",$regs[$i+1][0]).'<br>'; ?> SELECT: t2.col1 FROM: (SELECT col1, col2 FROM t1 WHERE 1 = 1 ORDER BY col1) t2 WHERE: t2.col1 = 1 AND t2.col2 IN (SELECT t1.col1 FROM t1 WHERE t1.col1 = 1) GROUP BY: t2.col1 ORDER BY: t2.col1
$sql="SELECT [t2.col1] FROM
[(SELECT col1, col2 FROM t1 WHERE 1 = 1 ORDER BY col1) t2]
WHERE [t2.col1 = 1 AND t2.col2 IN
SELECT t1.col1 FROM t1 WHERE t1.col1 = 1)]
GROUP BY [t2.col1]
ORDER BY [t2.col1]";preg_match_all("/\[[^\]]*\]/", $sql, $arr1);
preg_match_all("/\[([^\]]*)\]/", $sql, $arr2);echo "<pre>";
print_r($arr1);
print_r($arr2);
echo "</pre>";
?>
$sql="SELECT [t2.col1] FROM
[(SELECT col1, col2 FROM t1 WHERE 1 = 1 ORDER BY col1) t2]
WHERE [t2.col1 = 1 AND t2.col2 IN
SELECT t1.col1 FROM t1 WHERE t1.col1 = 1)]
GROUP BY [t2.col1]
ORDER BY [t2.col1]";preg_match_all("/\[[^\]]*\]/", $sql, $arr1);
preg_match_all("/\[([^\]]*)\]/", $sql, $arr2);echo "<pre>";
print_r($arr1);
print_r($arr2);
echo implode(" ", $arr1[0]);
echo "\n";
echo implode(" ", $arr2[1]);
echo "</pre>";
?>
SELECT [t2.col1] FROM
[(SELECT col1, col2 FROM t1 WHERE 1 = 1 ORDER BY col1) t2]
WHERE [t2.col1 = 1 AND t2.col2 IN
SELECT t1.col1 FROM t1 WHERE t1.col1 = 1)]
GROUP BY [t2.col1]
ORDER BY [t2.col1]
是合法的sql语句吗?正确的应该是:
SELECT t2.col1 FROM
(SELECT col1, col2 FROM t1 WHERE 1 = 1 ORDER BY col1) t2
WHERE t2.col1 = 1 AND t2.col2 IN
(SELECT t1.col1 FROM t1 WHERE t1.col1 = 1)
GROUP BY t2.col1
ORDER BY t2.col1楼主加上“[]”只是为了便于说明需求
<?php
$sql =<<< SQL
SELECT t2.col1
FROM (SELECT col1, col2 FROM t1 WHERE 1 = 1 ORDER BY col1) t2
WHERE t2.col1 = 1 AND t2.col2 IN
(SELECT t1.col1 FROM t1 WHERE t1.col1 = 1)
GROUP BY t2.col1
ORDER BY t2.col1
SQL;function fifo($v='') {
static $st = array();
if($v == '' || $v[1] == '_ST_')
return array_shift($st);
else {
array_push($st,$v[0]);
return '_ST_'.count($st).'_';
}
}$sql = preg_replace_callback("/\(.+\)/U","fifo",$sql);
preg_match_all("/(select)(.+)(from)(.+)(where)(.+)(group by)(.+)(order by)(.+)/is",$sql,$regs);for($i=1;$i<count($regs);$i+=2)
echo "{$regs[$i][0]}:".preg_replace_callback("/(_ST_)\d+_/","fifo",$regs[$i+1][0]).'<br>';
?>
SELECT: t2.col1
FROM: (SELECT col1, col2 FROM t1 WHERE 1 = 1 ORDER BY col1) t2
WHERE: t2.col1 = 1 AND t2.col2 IN (SELECT t1.col1 FROM t1 WHERE t1.col1 = 1)
GROUP BY: t2.col1
ORDER BY: t2.col1