php - 在使用 foreach 循环构建 sql 查询时删除最后一个 "UNION ALL"

标签 php mysql sql loops foreach

我想使用 foreach 循环构建以下 SQL 查询字符串

SELECT 'name' AS `field`. GROUP_CONCAT(DISTINCT `name`  ORDER BY `name`) AS `value`
FROM product
UNION ALL
SELECT 'category' AS `field`. GROUP_CONCAT(DISTINCT `category` ORDER BY `category`) AS `value`
FROM product
UNION ALL
SELECT 'year' AS `field`. GROUP_CONCAT(DISTINCT `year` ORDER BY `year`) AS `value`
FROM product

棘手的部分是以下循环会在 year 的最后一个 SELECT 语句中导致不必要的“UNION ALL”。

$selects = array("name"=>"Name","category"=>"Category","year"=>"Year");

$sql="";

foreach($selects as $select => $title)
{
  $sql .= "SELECT '".$select."' AS `field` , GROUP_CONCAT( DISTINCT `".$select."`ORDER BY `".$select."` SEPARATOR '|' ) AS `value` FROM `product` UNION ALL";
}

谁能告诉我如何从数组中的最后一个元素(在本例中为 Year)中删除最后一个 UNION ALL?

最佳答案

在变量中使用UNION ALL。将其初始化为空字符串。

在每次迭代前加上它。然后将 UNION ALL 分配给变量。

$selects = array("name"=>"Name","category"=>"Category","year"=>"Year");

$sql="";
$union_all="";

foreach($selects as $select => $title)
{
  $sql .= $union_all . "SELECT '".$select."' AS `field` , GROUP_CONCAT( DISTINCT `".$select."`ORDER BY `".$select."` SEPARATOR '|' ) AS `value` FROM `product`";
  $union_all=" UNION ALL ";
}

试一试!!!

关于php - 在使用 foreach 循环构建 sql 查询时删除最后一个 "UNION ALL",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24703322/

相关文章:

php - Doctrine/Symfony 查询构建器在左连接上添加选择

php - magento 打印友好的产品页面

php - 具有默认选择的调查轮询应用程序的数据库架构

sql - 我怎样才能让一个表 "overrides"另一个?

php mysql 搜索数据的最佳方式,单个查询与多个查询

android - 将 Android 应用程序连接到 sql server 数据库

mysql - 由父表中的部分主键组成的复合外键

PHP/HTTP-API - 如何从外部调用不同的 PHP 文件?

mysql - 使用存储过程性能会提高

sql - 如何根据字母排序顺序设置 int 值