# SQL Query Penner

**URL:** https://forum.shopware.com/t/sql-query-penner/35371
**Category:** Allgemein
**Created:** [17. März 2016 um 19:16 UTC](https://forum.shopware.com/t/sql-query-penner/35371 "2016-03-17T19:16:18Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![Euromann](https://avatars.discourse-cdn.com/v4/letter/e/eada6e/32.png) [@Euromann](https://forum.shopware.com/u/Euromann)
#### Post date: [17. März 2016 um 19:16 UTC](https://forum.shopware.com/t/sql-query-penner/35371/1 "2016-03-17T19:16:18Z")

</div>

Hi,

ich benötige eine SQL-Query, die mir alle Artikel ausgibt, die in einem bestimmten Zeitraum nicht verkauft wurden.

Verzweifeln tu ich an der Anforderung, dass ein Artikel als verkauft gilt, wenn IRGENDEINE Variante dieses Artikels verkauft wurde (so wie bei der entsprechenden Auswertung im Backend eben über alle Verkäufe eines Hauptartikels summiert wird).

Im Repository.php steht für diese Abfrage

> &nbsp;Returns a query which selects the sell count of each product.  
> &nbsp;&nbsp;&nbsp;&nbsp; \* @param \DateTime $from  
> &nbsp;&nbsp;&nbsp;&nbsp; \* @param \DateTime $to  
> &nbsp;&nbsp;&nbsp;&nbsp; \* @return DBALQueryBuilder  
> &nbsp;&nbsp;&nbsp;&nbsp; \*/  
> &nbsp;&nbsp;&nbsp; protected function createProductSalesBuilder(\DateTime $from = null, \DateTime $to = null)  
> &nbsp;&nbsp;&nbsp; {  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $builder = $builder = $this-\>connection-\>createQueryBuilder();  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $builder-\>select(array(  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ‚SUM(details.quantity) AS sales‘,  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ‚articles.name‘,  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ‚details.articleordernumber as ordernumber‘  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ))  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -\>from(‚s\_order\_details‘, ‚details‘)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -\>innerJoin(‚details‘, ‚s\_articles‘, ‚articles‘, ‚articles.id = details.articleID‘)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -\>innerJoin(‚details‘, ‚s\_order‘, ‚orders‘, ‚orders.id = details.orderID‘)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -\>andWhere(‚orders.status NOT IN (-1, 4)‘)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -\>groupBy(‚articles.id‘)  
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -\>orderBy(‚sales‘, ‚DESC‘);
> 
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-\>addDateRangeCondition($builder, $from, $to, ‚orders.ordertime‘);
> 
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $builder;  
> &nbsp;&nbsp;&nbsp; }

Es würde ja schon reichen, wenn in obiger Query auch Datensätze mit 0 Verkäufen MIT ausgegeben werden.

Allerdings weiß ich grad auch nicht, wie man diesen Quellcode da oben in eine MySQL-Query umwandelt.

Hat da jemand einen Ansatz für mich?

&nbsp;

Gruß

Euromann

&nbsp;

---

<div class="post-metadata">

### Author: ![brettvormkopp](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/brettvormkopp/32/7788_2.png) [@brettvormkopp](https://forum.shopware.com/u/brettvormkopp)
#### Post date: [17. März 2016 um 20:33 UTC](https://forum.shopware.com/t/sql-query-penner/35371/2 "2016-03-17T20:33:29Z")

</div>

Dieser „Quellcode“ ist ein Query Builder. Es vereinfacht Abfragen, interessant auch bei der&nbsp;Ausführzeit. Du musst diese allerdings nicht nutzen. Du kannst einfaches&nbsp;SQL nutzen.

---

<div class="post-metadata">

### Author: ![Euromann](https://avatars.discourse-cdn.com/v4/letter/e/eada6e/32.png) [@Euromann](https://forum.shopware.com/u/Euromann)
#### Post date: [17. März 2016 um 20:48 UTC](https://forum.shopware.com/t/sql-query-penner/35371/3 "2016-03-17T20:48:41Z")

</div>

schon klar, hab jetzt auch die Query bauen können, die da zusammengebaut wird

&nbsp;

> &nbsp;&nbsp;&nbsp; Select articles.name, articles.id, details.articleordernumber as ordernumber  
> &nbsp;&nbsp; &nbsp;FROM s\_order\_details details  
> &nbsp;&nbsp; &nbsp;inner JOIN s\_articles as articles on details.articleID = articles.id  
> &nbsp;&nbsp; &nbsp;inner join s\_order as orders on orders.id = details.orderID  
> &nbsp;&nbsp; &nbsp;where orders.status NOT IN (-1, 4)  
> &nbsp;&nbsp; &nbsp;and orders.ordertime \> „2014-01-01 00:00:00“  
> &nbsp;&nbsp; &nbsp;group by articles.id

die muss ich jetzt so umbauen, dass mir auch nicht verkaufte Artikel angezeigt werden, mit Right Joins bzw. Left Joins

---

<div class="post-metadata">

### Author: ![Euromann](https://avatars.discourse-cdn.com/v4/letter/e/eada6e/32.png) [@Euromann](https://forum.shopware.com/u/Euromann)
#### Post date: [17. März 2016 um 21:31 UTC](https://forum.shopware.com/t/sql-query-penner/35371/4 "2016-03-17T21:31:39Z")

</div>

ich glaub ich hab’s

&nbsp;

> SELECT ad1.ordernumber  
> FROM s\_articles\_details ad1  
> join s\_articles a on a.id = ad1.articleID  
> left join s\_order\_details as od on od.articleID=a.id  
> where od.articleordernumber is NULL  
> group by a.id

jetzt noch den Datumsbereich reinpfriemeln…

---

<div class="post-metadata">

### Author: ![Euromann](https://avatars.discourse-cdn.com/v4/letter/e/eada6e/32.png) [@Euromann](https://forum.shopware.com/u/Euromann)
#### Post date: [20. März 2016 um 21:05 UTC](https://forum.shopware.com/t/sql-query-penner/35371/5 "2016-03-20T21:05:48Z")

</div>

Ok, das mit dem Datumsbereich ist nicht so einfach, weil das Datum in der s\_order steht.

&nbsp;

hat jemand einen Tipp?

---

<div class="post-metadata">

### Author: ![Thomas](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/thomas/32/8167_2.png) [@Thomas](https://forum.shopware.com/u/Thomas)
#### Post date: [21. März 2016 um 12:29 UTC](https://forum.shopware.com/t/sql-query-penner/35371/6 "2016-03-21T12:29:13Z")

</div>

Hier mein Ansatz:

> SELECT sad.ordernumber  
> FROM s\_articles\_details sad  
> LEFT JOIN (  
> &nbsp;&nbsp; &nbsp;SELECT sod.articleID&nbsp;  
> &nbsp;&nbsp; &nbsp;FROM s\_order\_details sod  
> &nbsp;&nbsp; &nbsp;INNER JOIN s\_order so ON sod.orderID = so.id  
> &nbsp;&nbsp; &nbsp;WHERE so.ordertime \>= ‚0‘  
> &nbsp;&nbsp; &nbsp;GROUP BY sod.articleID  
> ) as tmp ON tmp.articleID = sad.articleID  
> WHERE tmp.articleID IS NULL  
> GROUP BY sad.articleID
