Php 在opencart中将商店id添加到产品导出(mysql查询)
另一个需要解释的奇怪问题,提前谢谢你的帮助 我继承了一个opencart安装,我被要求修改一个报告生成器(ProductExport Express),它运行一个大型MySQL查询,输出一个包含所有相关产品信息以及其他花絮数据的xls文件。现在我正在使用以下代码: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
<?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
}