[英]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.