MarcoFuerte Posted January 23, 2020 Share Posted January 23, 2020 Hallo zusammen, ich möchte gerne eine SQL Abfrage machen die mir folgende Informationen anzeigt. NAME PRODUKT / ARTIKELNUMMER / AKTUELLER LAGERBESTAND / VERKAUFTE MENGE DER LETZTEN 365 TAGE / *optional* BESTELLVORSCHLAG FÜR 365TAGE (VERKAUFTE MENGE - AKTUELLER LAGERBESTAND + 10%) Es scheitert bei mir an der VERKAUFTEN MENGE DER LETZTEN 365 TAGE .. der Bestellvorschlag wäre optional noch ganz gut aber nicht zwingend nötig.... das was ich bist jetzt habe ist folgendes : ____________________________________________________________________________________________________________________ SELECT b.`name` AS `PRODUKT`, `reference`AS `ART.NO`, sav.`quantity` AS `LAGERBESTAND` FROM `ps_product` a LEFT JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 1 AND b.`id_shop` = 1) LEFT JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product` AND sav.`id_product_attribute` = 0 AND sav.id_shop = 1 AND sav.id_shop_group = 0 ) JOIN `ps_product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default) LEFT JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default) LEFT JOIN `ps_shop` shop ON (shop.id_shop = a.id_shop_default) LEFT JOIN `ps_image_shop` image_shop ON (image_shop.`id_product` = a.`id_product` AND image_shop.`cover` = 1 AND image_shop.id_shop = a.id_shop_default) LEFT JOIN `ps_image` i ON (i.`id_image` = image_shop.`id_image`) LEFT JOIN `ps_product_download` pd ON (pd.`id_product` = a.`id_product` AND pd.`active` = 1) WHERE 1 AND cl.`name` LIKE '%alle%' ORDER BY sav.`quantity` ASC ____________________________________________________________________________________________________________________ Kann mir jemand behliflich sein bein erstellen der SQL Abfrage? Marco PS 1.6.1.20 Link to comment Share on other sites More sharing options...
SliderFlash Posted January 23, 2020 Share Posted January 23, 2020 (edited) eine office lösung ist da viel effektiver. was hast du vor ? Edited January 23, 2020 by SliderFlash (see edit history) Link to comment Share on other sites More sharing options...
MarcoFuerte Posted January 23, 2020 Author Share Posted January 23, 2020 Hallo SliderFlash, danke für deine Info, aber mit Office ( und alternativen) möchte ich in diesm fall nicht nutzen. Ich bestelle in 12Monate Zyklen meine Artikel, aktuell mach ich das über die PS Beliebteste Artikel - Statistik, - CSV Export und dann den Rest über Office. Ich hätte aber gerne die Funktion direkt als SQL Abfrage, z.b. Hersteller ruft mich an und ich drücke einen Kopf und kann Ihm sagen was ich brauche und wieviel ( 365 Tage +10% ) Meine Formel lautet : (VERKAUFTE STÜCKZAHL LETZTEN 365 TAGE - AKTUELLER LAGERBESTAND) *1,10 dafür benötige ich aber entweder die Menge der verkauften Artikel übers Jahr oder den Tagesschnitt bzw. beides ( aktuell bekomme ich diese Info über die Statistik) ... und es dauter relativ lange bei mehreren Artikeln. Klar kann ich die Liste aus PS ziehen und dann in Office als CSV importieren die Formel reinhacken und dann suchen was ich benötige. Die andere Lösung wäre das die Abfrage alles für mich erledigt . Diese SQL Abfrage dann sehr hilfreich und schnell. Marco Link to comment Share on other sites More sharing options...
Wuschel Posted January 23, 2020 Share Posted January 23, 2020 Wenn dir gar nichts einfällt, kannst du date_add <= Endedatum AND date_add >= Beginndatum als Bedingung einsetzen. Aber funktionieren wird die SQL-Abfrage schon deswegen nicht, weil die Tabellen nicht alle miteinander verknüpft sind. Das würde nur Fehlermeldungen hageln. Gibt es z.B. einen Grund, warum du unbedingt die Artikelbilder mit einbeziehen willst. Die sind doch für die Fragestellung irrelevant. Link to comment Share on other sites More sharing options...
MarcoFuerte Posted January 23, 2020 Author Share Posted January 23, 2020 Hallo Wuschel, Das mit den Artikelbildern hab ich noch nicht rausgenommen gehabt .. Ich bin schon etwas weiter ... bis dato und bereinigt sieht es so aus : _______________________________________________________________ SELECT a.id_product, sum(x.quantity) AS 'sold', round(sum(x.quantity) * 1.10 ) AS 'Vorschlag', b.`name` AS `PRODUKT`, `reference`AS `ART.NO`, cl.name as 'cat', sav.`quantity` AS `LAGERBESTAND` FROM `ps_product` a JOIN ps_product_sale x ON (x.id_product = a.id_product) JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 1 AND b.`id_shop` = 1) JOIN `ps_product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default) JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default and cl.id_category = 3) JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product`) WHERE x.date_upd between date_sub(now(),interval 365 day) AND now() GROUP BY a.id_product ORDER BY sav.`quantity` ASC ______________________________________________________________ Marco Link to comment Share on other sites More sharing options...
SliderFlash Posted January 24, 2020 Share Posted January 24, 2020 (edited) hallo MarcoFuerte, vielleicht hilft das hier weiter https://devdocs.prestashop.com/1.7/development/database/db/ Edited January 24, 2020 by SliderFlash (see edit history) Link to comment Share on other sites More sharing options...
MarcoFuerte Posted January 24, 2020 Author Share Posted January 24, 2020 (edited) Sorry ... war gestern schon im bett ... hab es fertig .. falls jemand sowas gebrauchen kann dann hier : ggf. interval und kategorie ändern ... z.b. hier auf 90 day und dann auch IDEAL 3M - _________________________________________________________________________________________________________________________ SELECT a.id_product, a.`reference`AS 'ART.NO', b.`name` AS 'PRODUKT', sav.`quantity` AS 'AKTUELLER LAGERBESTAND', sum(d.product_quantity) AS 'VERKAUFT', round(sum(d.product_quantity) * 1.10 ) - sav.quantity AS 'IDEAL 3M', cl.name as 'KATEGORIE' FROM ps_order_detail d JOIN ps_orders x ON ( d.id_order = x.id_order AND (x.`date_add` BETWEEN date_sub(now(), interval 90 day) AND now() ) ) JOIN `ps_product` a ON (d.product_id = a.id_product) JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 1 AND b.`id_shop` = 1) JOIN `ps_product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default) JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default and cl.id_category = 3) JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product`) GROUP BY a.id_product ORDER BY sav.`quantity` ASC _______________________________________________________________________________________________________________________________ Danke Marco Edited January 24, 2020 by MarcoFuerte (see edit history) Link to comment Share on other sites More sharing options...
SliderFlash Posted January 24, 2020 Share Posted January 24, 2020 (edited) und gibst du auch die Datei dazu ? für die ausgabe. Edited January 24, 2020 by SliderFlash (see edit history) Link to comment Share on other sites More sharing options...
MarcoFuerte Posted January 24, 2020 Author Share Posted January 24, 2020 Hallo SliderFlash Versteh die Frage nicht ... ?? SQL STEHT OBEN DRIN .... Link to comment Share on other sites More sharing options...
SliderFlash Posted January 24, 2020 Share Posted January 24, 2020 (edited) und wo wird es ausgegeben bzw. angezeigt ? Edited January 24, 2020 by SliderFlash (see edit history) Link to comment Share on other sites More sharing options...
MarcoFuerte Posted January 24, 2020 Author Share Posted January 24, 2020 Du musst die 1. Kategorie anpassen ... 2. Intervall auf Tage einstellen ... 3. Bezeichnung 3Monate oder was auch Immer anpassen ... Fertig ... Hier die neueste Version : SELECT a.id_product, a.`reference`AS 'ART.NO', sa.`active`AS `AKTIV`, b.`name` AS 'PRODUKT', sav.`quantity` AS 'AUF LAGER', sum(d.product_quantity) AS 'VERKAUFT 12M', round(sum(d.product_quantity) * 1.10 ) - sav.quantity AS 'IDEAL 12M', a.`wholesale_price` AS `EK NETTO`, a.`price` AS `VK NETTO`, cl.name as 'KATEGORIE' FROM ps_order_detail d JOIN ps_orders x ON ( d.id_order = x.id_order AND (x.`date_add` BETWEEN date_sub(now(), interval 365 day) AND now() ) ) JOIN `ps_product` a ON (d.product_id = a.id_product) JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 1 AND b.`id_shop` = 1) JOIN `ps_product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default) JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default and cl.id_category = 3) JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product`) GROUP BY a.id_product ORDER BY sav.`quantity` ASC Mach jetzt noch das letzte Verkaufsdatum eines Produktes rein ... meine Final version kommt dann .. LG Marco Link to comment Share on other sites More sharing options...
MarcoFuerte Posted January 24, 2020 Author Share Posted January 24, 2020 (edited) 34 minutes ago, SliderFlash said: und wo wird es ausgegeben bzw. angezeigt ? Du solltest bei PS eine neue SQL Abfrage erstellen - Kode reinkopieren ... Fertig ... Danach kannst du dir das direkt in PS anzeigen lassen oder per CSV in Excel anzeigen lassen .. Sorry Tastatur spinnt gerade .. Deshalb alles gross Buchstaben .. Edited January 24, 2020 by selectshop.at mass capital letters removed (see edit history) Link to comment Share on other sites More sharing options...
SliderFlash Posted January 24, 2020 Share Posted January 24, 2020 30 minutes ago, MarcoFuerte said: Du musst die 1. Kategorie anpassen ... 2. Intervall auf Tage einstellen ... 3. Bezeichnung 3Monate oder was auch Immer anpassen ... Fertig ... ok Danke ich schaue mal bei den Kategorien nach. 😎 Link to comment Share on other sites More sharing options...
MarcoFuerte Posted January 24, 2020 Author Share Posted January 24, 2020 SO HIER MEINE FILANLE VERSION .... SELECT a.id_product, a.`reference`AS 'ART.NO', sa.`active`AS `AKTIV`, b.`name` AS 'PRODUKT', sav.`quantity` AS 'AUF LAGER', sum(d.product_quantity) AS 'VERKAUFT 12M', max(x.date_add) AS 'LETZER VERKAUF', round(sum(d.product_quantity) * 1.10 ) - sav.quantity AS 'IDEAL 12M', a.`wholesale_price` AS `EK NETTO`, a.`price` AS `VK NETTO`, cl.name as 'KATEGORIE' FROM ps_order_detail d JOIN ps_orders x ON ( d.id_order = x.id_order AND (x.`date_add` BETWEEN date_sub(now(), interval 365 day) AND now() ) ) JOIN `ps_product` a ON (d.product_id = a.id_product) JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 1 AND b.`id_shop` = 1) JOIN `ps_product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default) JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default and cl.id_category = 3) JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product`) GROUP BY a.id_product ORDER BY sav.`quantity` ASC ICH DANKE ALLEN DIE MIR HIER IM FORUM GEHOLFEN HABEN DIE ABFRAGE ZU ERSTELLEN 🙂 Link to comment Share on other sites More sharing options...
Wuschel Posted January 24, 2020 Share Posted January 24, 2020 Wie ich oben schon sagte: 16 hours ago, Wuschel said: Aber funktionieren wird die SQL-Abfrage schon deswegen nicht, weil die Tabellen nicht alle miteinander verknüpft sind. Und daran hat sich nichts geändert. Link to comment Share on other sites More sharing options...
MarcoFuerte Posted January 24, 2020 Author Share Posted January 24, 2020 (edited) Hallo Wuschel ... DAS FUNKTIONERT SUPER !!!!! Einfach mal probieren ... Marco sql12m.mp4 Edited January 24, 2020 by MarcoFuerte (see edit history) Link to comment Share on other sites More sharing options...
MarcoFuerte Posted January 27, 2020 Author Share Posted January 27, 2020 (edited) FINALE VERSION - MIT LAGERREICHWEITEN VORHERSAGE (ca.) in TAGEN UND MONATEN & EK BESTELLWERT pro PROUKT ... 1. für andere Intervalle unten die: interval 365 day" auf Tage ändern. 2. für andere Warengruppen die cl.id_category (aktuell 3) auf eure Kategorie ändern : JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default and cl.id_category = 3) 3. wenn Ihr keine Kategorien braucht sondern alles sehen wollt dann löscht folgendes : AND cl.id_shop = a.id_shop_default and cl.id_category = 3 _________________________________________________________________________________________________________________________________ SELECT a.id_product AS 'ID', a.`reference`AS 'ART.NO', sa.`active`AS `AKTIV`, b.`name` AS 'PRODUKT', sav.`quantity` AS 'AUF LAGER', sum(d.product_quantity) AS 'VERKAUFT 12M', (sum(d.product_quantity) / 365 ) AS 'VERKAUF PRO TAG', round ((sav.quantity / (sum(d.product_quantity) /365)),1) AS 'REICHWEITE TAGE', round (((sav.quantity / (sum(d.product_quantity) /365)) /30),1) AS 'REICHWEITE MONAT', max(x.date_add) AS 'LETZER VERKAUF', 'BESTELLEN' AS 'BESTELLEN FÜR ', round((sum(d.product_quantity) * 1.10 ) - sav.quantity) AS '12 MONATE', ' € ' AS '. ', round (a.wholesale_price,2) AS 'STK -EK ', ' € ' AS ' ', round (((((sum(d.product_quantity) * 1.10 ) - sav.quantity)) * a.wholesale_price),2) AS 'BESTELLWERT' FROM ps_order_detail d JOIN ps_orders x ON ( d.id_order = x.id_order AND (x.`date_add` BETWEEN date_sub(now(), interval 365 day) AND now() ) ) JOIN `ps_product` a ON (d.product_id = a.id_product) JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 1 AND b.`id_shop` = 1) JOIN `ps_product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = a.id_shop_default) JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = a.id_shop_default and cl.id_category = 3) JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product`) GROUP BY a.id_product ORDER BY sav.`quantity` ASC ____________________________________________________________________________________________________________ mich würde mal interessieren wer sowas ausser mir noch gebrauchen kann ... LG Marco Edited January 27, 2020 by MarcoFuerte (see edit history) Link to comment Share on other sites More sharing options...
frezzo Posted March 16, 2021 Share Posted March 16, 2021 Hallo Marco Deine Abfrage wäre super, nur leider kriege ich nicht heraus, wie die auch unter Presta 1.7.7.1 zum laufen kriege. Es erzeugt mir ein leeres Excel File. Hat jemande eine Idee was sich geändert hat an der DB? Vielen Dank. Link to comment Share on other sites More sharing options...
Wuschel Posted March 16, 2021 Share Posted March 16, 2021 (edited) Vergiss es! An meiner Feststellung vor über einem Jahr (s. weiter oben) hat sich nichts geändert. Die Abfrage funktionierte auch mit früheren Prestashop-Versionen nicht. Edited March 16, 2021 by Wuschel (see edit history) Link to comment Share on other sites More sharing options...
frezzo Posted March 16, 2021 Share Posted March 16, 2021 Hey Wuschel - vergessen ist an der Stelle aber nicht die Lösung Vielleicht hat jemand einen Lösungsansatz? Und warum funktioniert das bei Marco? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now