Php 用其他语句替换SELECT语句
我有以下疑问:Php 用其他语句替换SELECT语句,php,mysql,symfony,Php,Mysql,Symfony,我有以下疑问: $sql = "SELECT u.id, u.login FROM AcmeBundle:Users u WHERE 1 = 1"; 在某些情况下,我想在SELECT子句中使用其他内容,例如: if($count == 1) { $sql = "SELECT COUNT(u.id) FROM AcmeBundle:Users u WHERE 1 = 1"; } 但是不需要再次
$sql = "SELECT u.id,
u.login
FROM AcmeBundle:Users u
WHERE 1 = 1";
在某些情况下,我想在SELECT子句中使用其他内容,例如:
if($count == 1)
{
$sql = "SELECT COUNT(u.id)
FROM AcmeBundle:Users u
WHERE 1 = 1";
}
但是不需要再次编写整个查询…在这个if条件中,我只想替换前面定义的$sql变量中的SELECT子句的内容…我怎么做
比如:
if($count == 1)
{
$sql = str_replace("SELECT ...", "COUNT(u.id)", $sql);
}
希望您是这个意思。或者您可以使用语法并添加一个$select
变量
$select = $count == 1 ? "COUNT(u.id)" : "u.id, u.login";
$sql = <<<SQL
SELECT {$select}
FROM AcmeBundle:Users u
WHERE 1 = 1
SQL;
$select=$count==1?“计数(u.id)”:“u.id,u.login”;
$sql=您也可以使用。
大概是这样的:
$builder = $manager->createQueryBuilder()
->select('p')
->from('AcmeDemoBundle:Product', 'p');
$builder->select('COUNT(p)');
将导致从AcmeDemoBundle中选择p:产品p代码>如果现在重置选择如下所示的:
$builder = $manager->createQueryBuilder()
->select('p')
->from('AcmeDemoBundle:Product', 'p');
$builder->select('COUNT(p)');
它将导致以下查询:从AcmeDemoBundle中选择计数(p):产品p代码> 为什么要添加,其中1=1
,这并不重要。这只是一个例子,我稍后会使用它来应用基于GET值的过滤器,这并不重要。理想情况下,我希望使用一些正则表达式来匹配SELECT和FROM之间的所有内容,然后替换它……可能吗?为什么要这样做?我看不出您需要为查询执行str\u replace
的任何原因。但是您可以执行preg_replace(“/SELECT(.*)FROM/”,“SELECT other FROM”,$sql)代码>