Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在opencart中将商店id添加到产品导出(mysql查询)_Php_Mysql_Sql_Opencart - Fatal编程技术网

Php 在opencart中将商店id添加到产品导出(mysql查询)

Php 在opencart中将商店id添加到产品导出(mysql查询),php,mysql,sql,opencart,Php,Mysql,Sql,Opencart,另一个需要解释的奇怪问题,提前谢谢你的帮助 我继承了一个opencart安装,我被要求修改一个报告生成器(ProductExport Express),它运行一个大型MySQL查询,输出一个包含所有相关产品信息以及其他花絮数据的xls文件。现在我正在使用以下代码: <?php ini_set("memory_limit","1G"); class ModelInventoryExpress extends Model { public function getPr

另一个需要解释的奇怪问题,提前谢谢你的帮助

我继承了一个opencart安装,我被要求修改一个报告生成器(ProductExport Express),它运行一个大型MySQL查询,输出一个包含所有相关产品信息以及其他花絮数据的xls文件。现在我正在使用以下代码:

    <?php
ini_set("memory_limit","1G");   
class ModelInventoryExpress extends Model
{


    public function getProducts(){
        $products_sql = "SELECT
        p.product_id AS             `Product ID`, 
        p.model AS                  `Model`,
        p.sku as                    `SKU`,
        pd.name AS                  `Product Name`,
        cd.name as                  `Category`,
        p.location AS               `Location`,
        p.quantity AS               `Quanity`,
        (SELECT `text` 
        FROM product_attribute pa 
        WHERE pa.product_id = p.product_id 
        AND pa.attribute_id = 6) AS `Box Count`,

        (SELECT `text` 
        FROM product_attribute pa 
        WHERE pa.product_id = p.product_id 
        AND pa.attribute_id = 7) AS `Length`,

        (SELECT `text` 
        FROM product_attribute pa 
        WHERE pa.product_id = p.product_id 
        AND pa.attribute_id = 5) AS `Ring Gauge`,

        (SELECT `text` 
        FROM product_attribute pa 
        WHERE pa.product_id = p.product_id 
        AND pa.attribute_id = 4) AS `Strength`,

        (SELECT `text` 
        FROM product_attribute pa 
        WHERE pa.product_id = p.product_id 
        AND pa.attribute_id = 3) AS `Wrapper`,

        CASE
        WHEN p.`status` = 1
        THEN 'active'
        ELSE 'non-active'
        END  AS `Status` ,
        md.name as                  `Manufacturer`,
        FORMAT(p.price, 2) as   `Price`,
        FORMAT(p.cost, 2) as    `Cost`,
        FORMAT(p.wholesale, 2) as   `Wholesale`,                

        CASE
        WHEN pts.`store_id` = 0
        THEN 'StogieBoys.com'
        WHEN pts.`store_id` = 1
        THEN 'CigarHeist.com'
        WHEN pts.`store_id` = 2
        THEN 'm.stogieboys.com'
        WHEN pts.`store_id` = 3
        THEN 'BestCigarStuff.com'
        WHEN pts.`store_id` = 6
        THEN 'SBCigarWholesale.com'
        WHEN pts.`store_id` = 8
        THEN 'StogieTrade.com'
        ELSE 'None'
        END  AS                         `Store`,

        CASE
        WHEN p.`is_dropshipped` = 1
        THEN 'Yes'
        ELSE 'No'
        END  AS                         `Is Dropshipped`        

        FROM
        product p,
        product_description pd,
        product_to_category ptc,
        category_description cd,
        manufacturer md,
        product_to_store pts
        WHERE 1
        AND p.product_id = pd.product_id
        AND p.product_id = ptc.product_id
        AND ptc.category_id = cd.category_id
        AND p.manufacturer_id = md.manufacturer_id
        AND p.product_id = pts.product_id
        ORDER BY pd.name        
         "; 
         $query = $this->db->query($products_sql);
         return $query->rows;   
    }
}
但这并没有像预期的那样起作用,因为在store表中,默认存储是0,并且该表从多存储设置的其他存储开始。例如1等,但不列出默认值或0存储


要想得到我所希望的结果,最好的方式是什么?

哦,伙计,你听说过
加入
,…)

您的巨大查询是一个非常好的例子,说明了如何做错事,下面是一个如何做错事的例子:

public function getProducts() {
    // retrieve products with basic data
    $products = $this->db->query("SELECT
    p.product_id              `Product ID`, 
    p.model                   `Model`,
    p.sku                     `SKU`,
    pd.name                   `Product Name`,
    cd.name                   `Category`,
    p.location                `Location`,
    p.quantity                `Quanity`,
    p.`status`                `Status` ,
    md.name                   `Manufacturer`,
    FORMAT(p.price, 2)        `Price`,
    FORMAT(p.cost, 2)         `Cost`,
    FORMAT(p.wholesale, 2)    `Wholesale`,                
    pts.`store_id`            `Store`,
    p.`is_dropshipped`        `Is Dropshipped`        

    FROM product p,
        LEFT JOIN product_description pd ON pd.product_id = p.product_id AND pd.language_id = " . (int)$this->config->get('config_language_id') . "
        LEFT JOIN product_to_category ptc ON ptc.product_id = p.product_id,
        LEFT JOIN category_description cd ON cd.category_id = ptc.category_id AND cd.language_id = " . (int)$this->config->get('config_language_id') . "
        LEFT JOIN manufacturer m ON m.manufacturer_id = p.manufacturer_id
        LEFT JOIN product_to_store pts ON pts.product_id = p.product_id

    ORDER BY pd.name")->rows;

    foreach($products as $key => $product) {
        $products[$key]['Box Count']  = $this->getProductAttributeValue($product['product_id'], 6);
        $products[$key]['Length']     = $this->getProductAttributeValue($product['product_id'], 7);
        $products[$key]['Ring Gauge'] = $this->getProductAttributeValue($product['product_id'], 5);
        $products[$key]['Strength']   = $this->getProductAttributeValue($product['product_id'], 4);
        $products[$key]['Wrapper']    = $this->getProductAttributeValue($product['product_id'], 3);
    }

    return $products;   
}

public function getProductAttributeValue($product_id, $attribute_id) {
    $query = $this->db->query("SELECT `text` 
    FROM product_attribute pa 
    WHERE pa.product_id = " . (int).$product_id . "
    AND pa.attribute_id = " . (int)$attribute_id);

    return $query->row['text'];
}
正如您可能提到的,我从SQL中删除了所有
CASE WHEN
,因为这些
状态
存储id
等的逻辑解释应该在您的模板或控制器中完成。SQL查询(和模型)应该只检索和存储数据,您应该使SQL查询尽可能简单。。。还提到了s

对于
0
store(即产品中的
NULL
或无值),当然要显示正确的商店名称。它不是
0
(零)而是
NULL
,而是一个简单的检查:

if($product['store_id']) {
    // we have store_id
} else {
    // store_id is not set (NULL), display as the main store
}

在这里就足够了……

理解您的逻辑时遇到问题。”。我需要它匹配并列出产品可能出现在其中的所有门店,与在类别中一样。”我假设“门店id”只包含一个门店值……您是否希望每个产品返回多行,每个门店返回一行……或者?。。。(顺便说一句,不要让你的案例陈述扩大到这么大……创建一个参考表,然后加入到其中。那里有更容易的未来管理)我昨天在出门的时候写了这篇文章,很抱歉,理解起来有点粗糙。我希望返回多行,每个存储一行
cd.name作为
Category
符合我的要求。但我无法让它与store_id一起工作。该字段有一个包含5个可能数字的列表,默认为null。这是否足够澄清?我可以先说一会儿,哇。谢谢你,我想。我需要一段时间来了解这件事,以确保我理解正在发生的事情,所以请耐心等待。我对SQL调用还是很陌生,所以我听说过这些调用,但对它们如何工作或做什么知之甚少。当我被要求使用命令时,我会学习这些命令。正如我现在所做的;-)第二,我相信我提到了我继承了它,所以我尝试将store_id添加到我在现有结构中工作的输出中,无论有多大的缺陷。到目前为止,加上价格、成本和批发是我为这部电影所做的一切。第三:再次感谢你的帮助。我将做一点谷歌搜索,然后测试它,看看它是如何工作的。第四:如果在你的有益的咆哮结束时有一个声明,那该如何实施呢?因为99%的返回项将具有空值,其中许多项最多具有3个值。感谢您帮助这只老狗学习新技巧。
Parse error:syntax error,unexpected.”第48行的/home2/theciga2/public_html/stogieboys/admin/model/inventory/express.php中的
是按原样尝试代码时出现的错误。我试着取下那根绳子。在前面提到的$product行中,但之后我得到的只是一个空白屏幕,错误日志中没有任何内容。这就是为什么我在现有结构内工作,而不是从零开始;-)感谢您指出连接位,现在我知道它的作用了,这将派上用场。
if($product['store_id']) {
    // we have store_id
} else {
    // store_id is not set (NULL), display as the main store
}