簡體   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