Еще один странный вопрос, который требует немного объяснений, заранее за помощь.Добавление идентификатора магазина в экспорт продукта в opencart (запрос mysql)
Я унаследовал установку opencart, и меня попросили изменить генератор отчетов (Product Export 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_id. CASE вернет только первое совпадающее значение, а затем перейдет к следующему бит. Мне нужно, чтобы он соответствовал и перечислял ВСЕ магазины, в которых может отображаться продукт, как и для категории.
Когда выше не работает, я попытался установить его как «категория» АС немного так:
s.name 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,
store s,
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
AND pts.store_id = s.store_id
ORDER BY pd.name
Но это не работает, как ожидалось, потому что в магазине таблицы магазина по умолчанию равно 0, и эта таблица начинается с других магазинов множества хранилищ. И.Е. 1 и т. Д., Но не содержит список по умолчанию или 0.
Каким будет лучший способ модерировать этот запрос, чтобы получить результаты, на которые я надеюсь?
Возникли проблемы понимания вашей логики "мне это нужно, чтобы соответствовать и перечислить все магазины, которые продукт может появиться, так же, как и для категории ». Я предполагаю, что «store_id» содержит только одно значение хранилища ... вы ожидаете, что на каждый продукт будет возвращено несколько строк, по одному для каждого магазина ... или? ... (как побочная заметка, не позволяйте утверждениям вашего дела расти этот большой ... создайте справочную таблицу и присоединитесь к ней вместо этого. Легче будущее управление там) – Twelfth
Я написал это на выходе из двери вчера, извините, это немного грубо понять. Я ожидаю возвращения нескольких строк, по одному для каждого хранилища. 'cd.name как' Category', ' делает то, что я ищу. Но я не мог заставить его работать с store_id. Это поле имеет список из 5 возможных номеров и null для значения по умолчанию. Было ли это достаточно разъяснений? Я мог бы продолжить некоторое время – DieselPoweredNun