PHP查询将结果1更改为YES

时间:2011-11-10 13:11:46

标签: php mysql str-replace

我有一段代码,我用一个查询调用一组结果,然后将结果通过电子邮件发送给CSV。我的结果中的一列返回1或0.我希望它能够在创建CSV时为结果写一个YES,结果为1,否则返回结果为0.这只适用于一列我无法使用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.'"
');

3 个答案:

答案 0 :(得分:3)

您可以在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'

答案 1 :(得分:0)

比较整数值,如下所示:

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
}

上述内容会缩小整个检查,并使用ternary operator更改为一行。您正在访问数组,就好像它是一个对象一样(使用->代替[''])。

此外,这是如何工作的,因为$row是一个数组,而str_replace需要一个字符串?不确定您要做什么,但您可能需要array_map之类的内容。

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

答案 2 :(得分:0)

好吧,我没有在PHP上找到mysqli_fetch_array函数,所以,我只是假设你的意思是mysql_fetch_array,从名称判断应该做的几乎相同。您的代码中有两个问题,第一个问题是fetch数组的定义:

  

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指出的,所以我会跳过它。 希望我能帮忙!