繁体   English   中英

PHP查询将结果1更改为YES

[英]PHP query Changing a result of 1 to YES

我有一段代码,其中我用查询调用一组结果,然后将结果以CSV格式通过电子邮件发送。 我的结果的一列返回1或0。我想要这样,以便在创建CSV时,它为结果写YES,结果为1,而对于返回为0的结果为No。这仅适用于一列,因此我不能使用str_replace,因为这会影响所有数据(我不太擅长PHP,所以我可能是错的)。

我尝试了几件事,但似乎没有任何效果,下面是我尝试过的一种方法的代码部分:

while ($row = mysqli_fetch_array($result)) { 

if ($row->Optin_Marketing == "1") {
$mark = 'YES';
}
else {
$mark = 'NO';
}

$row->Optin_Marketing = $mark;

      for ($i = 0; $i < $columns; $i++) { 
        $row = str_replace('"', '', $row);
        $row = str_replace('en ', '', $row);

        // clean up the data; strip slashes; replace double quotes with two single quotes 
        $data_rows .= $file["csv_contain"] . preg_replace('/'.$file["csv_contain"].'/', $file["csv_contain"].$file["csv_contain"], stripslashes($row[$i])) . $file["csv_contain"];
        $data_rows .= ($i < $columns-1) ? $file["csv_separate"] : '';
      } 
      $data_rows .= $this->csv_end_row; // add data row to CSV file 
    } 

对此我们将给予任何帮助。

谢谢

我的查询:

$emailCSV->setQuery('SELECT
orderheader.ordernumber As Order_Number
, ccilog.orderid AS Order_ID
, ccilog.userid AS User_ID
, orderheader.billingcustomeremailaddress AS Customer_Email
, orderheader.billingcontactfirstname AS First_Name
, orderheader.billingcontactlastname AS Last_Name
, orderheader.billingcustomername AS Company
, orderheader.billingcustomeraddress1 AS Address_1
, orderheader.billingcustomeraddress2 AS Address_2
, orderheader.billingcustomeraddress3 AS Address_3
, orderheader.billingcustomercity AS City
, orderheader.billingcustomercounty AS County
, orderheader.billingcustomerpostcode AS Postcode
, users.sendmarketinginfo AS Optin_Marketing
FROM orderheader 
LEFT JOIN users ON orderheader.userid=users.id
LEFT JOIN ccilog ON orderheader.id=ccilog.orderid
LEFT JOIN orderitems ON ccilog.orderid=orderitems.orderid
WHERE ccilog.formattedpaymentdate >= "'.$start.'" AND ccilog.formattedpaymentdate <= "'.$end.'"
');

您可以在mysql查询中执行此操作:

SELECT u.fieldname, CASE WHEN u.OPTION IS 1 THEN 'Yes' ELSE 'No' END AS 'yes/no'
FROM tblName u;

或者您可以按照nickb的建议进行操作。

编辑:

为了使其适合您的查询,您可以替换为:

users.sendmarketinginfo AS 

有了这个:

CASE users.sendmarketinginfo WHEN 1 THEN 'Yes' ELSE 'No' END AS 'Optin_Marketing'

比较整数值,如下所示:

while( $row = mysqli_fetch_array( $result)) 
{
    $row['Optin_Marketing'] = ( intval( $row['Optin_Marketing']) == 1) ? "YES" : "NO";
    echo $row['Optin_Marketing']; // Must be YES or NO here
}

以上浓缩了整个检查并使用三元运算符变成了一行。 您正在访问数组,就好像它是一个对象一样(使用->而不是[''] )。

另外,由于$row是一个数组,而str_replace需要一个字符串,这将如何工作? 不确定您要做什么,但是您可能需要array_map之类的东西

$row = str_replace('"', '', $row);
$row = str_replace('en ', '', $row);

好吧,我没有在PHP上找到mysqli_fetch_array函数,因此,我假设您的意思是mysql_fetch_array ,按名称判断应该做的差不多。 您的代码中有两个问题,第一个是fetch array的定义:

mysql_fetch_array —提取结果行为关联数组,数字数组或两者

可以这样修复:

while ($row = mysql_fetch_object($result)) { 
   $marketingOption = $row["Optin_Marketing"];

如果调用fetch_array,则应该获取数组,而不是对象,因此应采取相应措施。 您可以只调用mysql_fetch_object并按以下方式进行操作:

while ($row = mysql_fetch_object($result)) { 

尼克(nickb)很好地指出了第二点,因此我将跳过它。 希望我能帮忙!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM