SQL-запрос для отображения последней информации о заказе, включая изображения продуктов (Prestashop)

SQL-запрос для отображения последней информации о заказе, включая изображения продуктов (Prestashop)

26.04.2019 06:47:50 Просмотров 48 Источник

Используя sql-запрос от Prestashop (1.6 & 1.7), мне нужно вывести csv-файл, показывающий детали (X amount) моих последних заказов. Это должно включать сведения о каждом заказанном изделии и расположение изображений продукта для каждого изделия каждого заказа.

Я "думаю", что у меня есть две части sql, но я не знаю, как к ним присоединиться.

Я (понимаю и) эта часть уже работает

SELECT o.reference, c.firstname, c.lastname, a.lastname, a.firstname, a.address1, a.address2, a.postcode, a.city, a.phone, a.phone_mobile, o.id_order
FROM ps_orders o
LEFT JOIN ps_customer c on (c.id_customer = o.id_customer)
LEFT JOIN ps_address a on (a.id_address = o.id_address_delivery)
OUTER JOIN  (SELECT  *  from ps_order_detail where id_order = o.id_order limit 1) od1 on (o.id_order = o.id_order)

order by id_order desc limit 5

а это - то я позаимствовал на stack exchange

select
p.`id_product`
,pl.`name`
,concat('http:/mydomain.com/',cl.`link_rewrite`,'/',pl.`link_rewrite`,'-',p.`id_product`,'.html') as "ProductURL"
,case
    when length(im.`id_image`)=6 then
     concat('http:/mydomain.com/img/p/',insert(insert(insert(insert(insert(im.`id_image`,2,0,'/'),4,0,'/'),6,0,'/'),8,0,'/'),10,0,'/'),'/',im.`id_image`,'.jpg')
    when length(im.`id_image`)=5 then
     concat('http:/mydomain.com/img/p/',insert(insert(insert(insert(im.`id_image`,2,0,'/'),4,0,'/'),6,0,'/'),8,0,'/'),'/',im.`id_image`,'.jpg')
    when length(im.`id_image`)=4 then
     concat('http:/mydomain.com/img/p/',insert(insert(insert(im.`id_image`,2,0,'/'),4,0,'/'),6,0,'/'),'/',im.`id_image`,'.jpg')
    when length(im.`id_image`)=3 then
     concat('http:/mydomain.com/img/p/',insert(insert(im.`id_image`,2,0,'/'),4,0,'/'),'/',im.`id_image`,'.jpg')
    when length(im.`id_image`)=2 then
     concat('http:/mydomain.com/img/p/',insert(im.`id_image`,2,0,'/'),'/',im.`id_image`,'.jpg')
    when length(im.`id_image`)=1 then
     concat('http:/mydomain.com/img/p/',insert(im.`id_image`,2,0,'/'),im.`id_image`,'.jpg')  

    else ''
    end as "ImgURL_1"
FROM `ps_product` p
join `ps_product_lang` pl on pl.`id_product`= p.`id_product`
join `ps_category_lang` cl on cl.`id_category`= p.`id_category_default`
join `ps_image` im on im.`id_product`= p.`id_product`
where pl.`id_lang`=1 and cl.`id_lang`=1 and im.`cover`=1 and p.`active`=1

enter image description here

В основном мне нужна вся информация, которую вы получаете на обычном бланке доставки Prestashop, т. е. имя клиента, адрес, название продукта и т. д. и местоположение изображения продукта. Это тогда будет втянут в Adobe InDesign для индивидуальных товарно-транспортной накладной. Спасибо

У вопроса есть решение - Посмотреть?

Ответы - SQL-запрос для отображения последней информации о заказе, включая изображения продуктов (Prestashop) / SQL query to show latest order info including product images (Prestashop)

Bruno Leveque

07.05.2019 04:04:16

Это работает с PrestaShop 1.6 / 1.7, будет генерировать CSV-файл со всем необходимым, включая изображение:

<?php

include('config/config.inc.php');
include('init.php');

$context = Context::getContext();
$id_lang = (int)Configuration::get('PS_LANG_DEFAULT', (int)$context->shop->id);

$order_details = Db::getInstance()->ExecuteS('
SELECT o.reference, c.firstname, c.lastname, a.lastname, a.firstname, a.address1, a.address2, a.postcode, s.name state, a.city, a.phone, a.phone_mobile, o.id_order,
od.product_id, od.product_name, od.product_quantity, od.product_reference, i.id_image, pl.link_rewrite
FROM '._DB_PREFIX_.'orders o
LEFT JOIN '._DB_PREFIX_.'customer c on (c.id_customer = o.id_customer)
LEFT JOIN '._DB_PREFIX_.'address a on (a.id_address = o.id_address_delivery)
LEFT JOIN '._DB_PREFIX_.'state s on (a.id_state = s.id_state)
LEFT JOIN '._DB_PREFIX_.'order_detail od ON (od.id_order = o.id_order)
LEFT JOIN '._DB_PREFIX_.'image i ON (i.id_product = od.product_id)
LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (pl.id_product = od.product_id)
WHERE o.valid = 1 AND i.cover = 1 AND pl.id_lang = '.(int)$id_lang.' AND pl.id_shop = '.(int)$context->shop->id.'
ORDER BY o.id_order DESC
LIMIT 5');

foreach ($order_details as &$od)
    $od['product_image'] = $context->link->getImageLink($od['link_rewrite'], $od['id_image'], 'home_default');

if (count($order_details))
{
    /* CSV Separator */
    $csv_sep = ',';
    $csv_delim = '"';

    /* CSV Header */
    $csv = '';
    foreach ($order_details[0] as $k => $val)
        $csv .= $k.$csv_sep;
    $csv = rtrim($csv, $csv_sep)."\n";

    /* Ordered products */
    foreach ($order_details as $line)
    {
        foreach ($line as $column)
            $csv .= $csv_delim.$column.$csv_delim.$csv_sep;
        $csv = rtrim($csv, $csv_sep)."\n";
    }

    /* Comment the two lines below if you'd just like to display instead of forcing download */
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="orders-'.date('YmdHis').'.csv"');
    echo $csv;
}

Результат:

CSV preview

Что я сделал:

  • Добавлен _DB_PREFIX_, чтобы убедиться, что он будет работать на других магазинах PrestaShop, которые могут иметь префикс таблицы базы данных, отличный от ps_
  • Добавлено o.valid = 1для включения только оплаченных и действительных заказов
  • Добавлено JOINв таблице imageдля выбора изображения обложки продукта
  • Добавлено название штата (например, Флорида, Калифорния и др.)
  • Добавлено название продукта, идентификатор, ссылка и заказанные количества
  • Получение изображения продукта с помощью встроенных методов PrestaShop
  • Генерируется файл CSV динамически

Надеюсь, это поможет!

Является ответом!
Chezzers

14.05.2019 01:15:59

Закрыть X