在PHP变量中使用MySQL查询但从CSV输出中省略

时间:2018-04-04 18:20:11

标签: php mysql

我有一个mysql查询,它是使用PHP输出CSV文件的基础。我有一个foreach语句,它使表中的每一列也成为CSV输出中的一列。

foreach($rowr as $name => $value)

我的问题是我需要省略查询中的一个列(Img AS source)而不是输出为列。

我目前正在使用

为MLSNumber值执行此操作
foreach($rowr as $name => $value)
{
     if($name !='MLSNumber'){
        $csv_output .= $name . "\t";
      }

我试图像这样更新这一行:$name !='MLSNumber' || $name !='source'但是当我这样做时它会破坏代码并最终显示为列。如何省略这两列?

$values = @mysqli_query($connect,"SELECT MLSNumber AS MLSNumber, ListAgentMLSID AS agent_ids, Matrix_Unique_ID AS mls, City AS city, PostalCode AS zip, REPLACE(PropertyInformation, '\r\n', '') AS description, SubCondoName AS neighborhood, ListPrice AS price, VirtualTourURL AS virtual_tour_1, Bedrooms AS bedrooms, BathsTotal AS bathrooms_full, ApproxLivingArea AS living_area, Img AS source FROM table-name WHERE ListOfficeName LIKE 'Company%' AND ListPrice >= 500000 AND PhotoCount >=4 ORDER BY CreatedDate DESC");

$row = 0;
while ($rowr = mysqli_fetch_assoc($values)) 
{
  if ($row == 0)
  {
    $csv_output .= "state\t";
    $csv_output .= "country_code\t";
    $csv_output .= "email\t";
    foreach($rowr as $name => $value)
    {
         if($name !='MLSNumber'){
            $csv_output .= $name . "\t";
          }
    }
    $csv_output .= "image_filename_1\timage_filename_2\timage_filename_3\timage_filename_4\timage_filename_5\tlink_url_1\tlink_text_1"; 
    $csv_output .= "\n";
  }
  $row++;
  $csv_output .= "FL\t";
  $csv_output .= "US\t";
  $csv_output .= "lreInquiry@my-url-link\t";
  foreach($rowr as $name => $value)
  {

       if($name !='MLSNumber'){ 
      if($name=='mls') {$jpg_name=$value;}
      if($name=='source') {$source_link=$value;}
                $csv_output .= $value."\t";
       }
  }
  {
      $csv_output .= "http://www.my-url-link/feeds/".$source_link."/rets_images/".$jpg_name."_1.jpg\t http://www.my-url-link/feeds/".$source_link."/rets_images/".$jpg_name."_5.jpg\t http://www.my-url-link/feeds/".$source_link."/rets_images/".$jpg_name."_2.jpg\t http://www.my-url-link/feeds/".$source_link."/rets_images/".$jpg_name."_3.jpg\t http://www.my-url-link/feeds/".$source_link."/rets_images/".$jpg_name."_4.jpg";
  }  
  foreach($rowr as $name => $value)
  {
      if($name=='MLSNumber') {$home_name=$value;}
  }
  {
      $csv_output .= "\thttp://www.my-url-link/search-results/?fullinfo=".$home_name."\tMore Details ";
  }  
      $csv_output .= "\n";    
}

2 个答案:

答案 0 :(得分:1)

问:有没有办法调整foreach语句以排除source列?

答:不,没有调整foreach会排除元素。

目前尚不清楚为什么要进行特定调整,因为foreach循环的主体包含对source列的引用(结果集中列的名称,其中包含{{1}的值列。)

Img

如果我们想从CSV中的行中省略该列,为什么我们不会跳过这一行的执行:

if($name=='source') {$source_link=$value;}

表示我们要排除的列名。

例如,我们可以用以下内容替换那一行:

 $csv_output .= $value."\t";

回答(再次)提出的问题:

不, if( $name!='source' ) { $csv_output .= $value."\t"; } 语句没有调整会省略或跳过某些元素。

答案 1 :(得分:1)

首先,如果你正在做一个foreach,这意味着你在概念上尝试使用数组中的所有元素,你可能应该使用一段时间。

根据我对你所说的内容和节省距离的理解,你可以尝试两种解决方案。

  1. 首先修改您的查询(SELECT aa,bb,cc,...),以便不受欢迎的列不会作为结果的一部分。
  2. 另一种方法是尝试这种通用形式:
  3.     $excludedColumnArr = array('source', 'MLSNumber', 'columnY', ...);
    
        foreach($rowr as $name => $value) {
          if(!in_array($name, $excludedColumnArr)){ 
            ...    
          }
      }
    

    希望这有帮助。