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 - Codeigniter REST上传多个图像

php - 字符串操作,回文回文

php - 如何使用MySQL在php中创建简单的登录名

php - 如何将bcrypted插入mysql?

mysql - MySQL:使用(选择?)表中的结果进行批处理更新的最快方法

java - 将PostgreSQL查询转换为DSLContext的问题

mysql - 如何在mysql中做一个简单的子查询

mysql - mysql错误1442的真正原因是什么?

mysql - sql查询从mysql中选择记录

sql - 如何在WHERE子句中进行区分大小写的搜索(我正在使用SQL Server)?