MySQL:将所有文章按顺序排列(2个表)


MySQL: get all articles to an order (2 tables)

我有两个表:

  1. oxoders(oxid、oxbillfname、oxbilllname、oxodernr(
  2. 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.*移到开头。