我有一段代码,我用一个查询调用一组结果,然后将结果通过电子邮件发送给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.'"
');
答案 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指出的,所以我会跳过它。 希望我能帮忙!