我有两个表:
- oxoders(oxid、oxbillfname、oxbilllname、oxodernr(
- oxoderarticles(oxid、oxoderid、oxtitle、oxamount、oxartnum(
现在我想输出每个订单,包括相应的文章。
实际上,如果我在一段时间内输出所有订单,并在其中使用匹配的article/orderid对oxorderarticles进行另一次选择,这就足够了。
代码被缩短了。mysqli连接已建立并正在工作。
最终目标是将结果呈现为电子邮件的html。
订单号:xxx文章:文章1 |金额|店铺链接第2条|金额|店铺链接
等等。
类似:
<?php
/**
* List all orders with corresponding articles
* @return array
*/
private function getOrderlist(){
$orders = array();
$theOrder = array();
$theOrderArticles = array();
// Order List - All orders
$sql_order = "
SELECT
oxorder.*,
CASE
WHEN LCASE(OXBILLSAL) = 'mr' OR LCASE(OXBILLSAL) = 'herr' THEN 'Sehr geehrter Herr'
WHEN LCASE(OXBILLSAL) = 'mrs' OR LCASE(OXBILLSAL) = 'frau' THEN 'Sehr geehrte Frau'
ELSE 'Sehr geehrte Damen und Herren'
END as 'order_anrede'
FROM oxorder
WHERE
DATEDIFF(oxorder.OXSENDDATE,CURRENT_TIMESTAMP) < 7 AND
oxorder.OXSENDDATE != '0000-00-00 00:00:00' AND
oxorder.OXORDERDATE > '2015-01-01 00:00:00' AND
";
// Executing
try{
$result_order = $this->_dbCon->query($sql_order);
// Fetching the articles of an order
while($row_order = $result_order->fetch_assoc()){
$sql_order_articles = "
SELECT
concat(oxoa.OXTITLE) as title,
oxoa.*
FROM oxorderarticles oxoa, oxseo seo
WHERE
oxoa.OXORDERID = '".$row_order['OXID']."' AND
oxoa.OXARTID = seo.OXOBJECTID";
$result_order_articles = $this->_dbCon->query($sql_order_articles);
while($row_order_articles = $result_order_articles->fetch_assoc()){
$theOrderArticles[] = $row_order_articles;
}
$theOrder['OXID'] = $row_order['OXID'];
// Writing the articles array into the article field
$theOrder['articles'] = $theOrderArticles;
}
} catch(Exception $e){
echo $e;
}
return $theOrder;
}
结果应该是一个数组,包含所有订单(包括每个对应的项目(。
我总是得到错误:致命错误:在非对象上调用成员函数fetch_assoc((。在最长执行时间之后,或者如果我取消进程。
我现在尝试了很多方法。使用一个额外的函数(getOrderArticles,它返回文章数组(。每个函数都可以单独工作,但如果我在getOrders的while中使用getOrderArticles,也会发生同样的事情。我还手动检查了SQL代码。它有效。但不在函数中(与文章一起(。
那些错误。。。这听起来像是$this->_dbCon->query(...)
中的一个,但没有被抓住。
特别是,我认为你不能做
SELECT ..., oxoa.* FROM...
要么拼出所需的列,要么将oxoa.*
移到开头。