【问题标题】:remove the last "UNION ALL" in building up a sql query with foreach loop在使用 foreach 循环构建 sql 查询时删除最后一个“UNION ALL”
【发布时间】:2014-09-02 09:49:10
【问题描述】:

我想使用 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";
}

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

【问题讨论】:

    标签: php mysql sql loops foreach


    【解决方案1】:

    在您的 foreach 中,创建一个不带 UNION ALL 的查询数组。那么:

    $sql = implode(' UNION ALL ', $queries);
    

    【讨论】:

      【解决方案2】:

      在变量中使用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 ";
      }
      

      试试看!!!

      【讨论】:

        【解决方案3】:

        下面的代码可以解决你的问题。

        $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`". ($select!='Year')?" UNION ALL":"";
        }
        

        【讨论】:

          猜你喜欢
          • 2018-07-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-24
          • 1970-01-01
          • 2018-11-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多