Jump to content
NSN

[Gelöst] SQL Abfrage - ich kapiers einfach nicht

Recommended Posts

Also SQL und ich werden wahrscheinlich keine Freunde. Ich kann machen was ich will ich versteh das Zeug nicht.

Ich versuche eine Abfrage zu machen welche folgende Informationen ausspucken soll:

Lieferant  --  Artikelname  --  Artikelnummer  --  Menge

Die Abfrage soll für bestimmte Bestellungen sein wobei die Bestellnummer für die Ausgabe nicht relevant ist (nur für die Auswahl der Daten).
Mengen sollten zusammengefasst werden, also wenn ein Artikel in mehreren Bestellungen auftaucht brauche in den Artikel nur einmal in der Liste aber mit der Gesamtmenge aus allen Bestellungen.
Geordnet werden soll das Ganze nach Lieferant sodass die Artikel eines Lieferanten nicht über die ganze Tabelle verteilt sind sondern untereinander.
Eigentlich wollte ich es dann sogar nochmals sortieren dass die Artikel bei den Lieferanten dann nach ABC sortiert sind aber da die Ersten 3 Punkte schon ein unüberwindbares Hindernis sind hab ich die Idee wieder verworfen.

Was ich bisher laienhaft zusammengebastelt habe hat bisher nicht gefruchtet und nur eine leere Tabelle ausgeworfen.

SELECT
s.name AS Lieferant,
od.product_name AS Artikel,
od.product_reference AS Artikel Nr,
od.product_quantity AS Menge,
FROM `ps_order_detail` od
LEFT JOIN `ps_order_detail` od ON o.`id_order` = od.`id_order`
LEFT JOIN `ps_supplier` od ON s.`product_reference` = od.`product_reference``
GROUP BY od.`product_name`
SORT BY s.name ASC
WHERE od.`id_order` =1166,1167,

Bei WHERE wollte ich die Bestellungen eingeben also je nachdem welche ich grad brauche.

Wo liegt mein Denkfehler. Wäre echt dankbar wenn mir jemand weiterhelfen kann.

Edited by NSN (see edit history)

Share this post


Link to post
Share on other sites

vielleicht hilft das hier https://www.php-einfach.de/mysql-tutorial/komplexere-datenabfrage/

Beispiel:

Möchte man beispielsweise nach einem Nutzer mit einer gewissen E-Mail-Adresse suchen, so müssen wir das Argument per Anführungszeichen umschließen.

$sql = "SELECT * FROM users WHERE email = 'info@php-einfach.de'";

 

Edited by SliderFlash (see edit history)

Share this post


Link to post
Share on other sites
SELECT s.name AS Lieferant, od.id_order,  od.product_reference AS ArtNr, od.product_name AS Artikel, SUM(od.product_quantity) AS Menge
    FROM ps_order_detail od
    LEFT JOIN ps_product p ON (p.id_product = od.product_id)
    LEFT JOIN ps_supplier s ON (s.id_supplier = p.id_supplier)
GROUP by od.product_name 
ORDER BY  s.name ASC

 

Grüsse
Whiley

Share this post


Link to post
Share on other sites

Danke für den Link SliderFlash. Ich hab die Seite auch schon mal gefunden aber in Sachen SQL werd ich wirklich nicht schlauer, egal was ich lese.

@Whiley Danke für die Abfrage. Eine Frage habe ich noch dazu. Ich würde gerne die Ausgabe nur für bestimmte Bestellungen haben. Ich habe das versucht mittels WHERE zu machen, erhalte aber entweder beim abspeichern eine Fehlermeldung oder beim Abrufen eine leere Tabelle.

Ich bräuchte die Tabelle z.B. für die Bestellungen 1166,1167 und 1168 (zusammengefasst). Der Sinn dahinter ist dass es dann eine Art Einkaufsliste ausspuckt welche sagt dass ich für die abgefragten Bestellungen bei Lieferant A von Produkt P 4 Stück brauche, bei Lieferant B von Produkt Q 2 Stück usw.

Als Beispiel:
Bestellung 1166 hat 2 Stück Produkt P und 1 Stück Produkt Q
Bestellung 1167 hat 1 Stück Produkt P und 1 Stück Produkt R
Bestellung 1168 hat 3 Stück Produkt P und 2 Stück Produkt Q sowie 2 Stück Produkt R

Tabelle sollte dann ausgeben:
Lieferant     Produkt     Menge
   A                    P                6
   B                    Q                3
   B                    R                3

Ich dachte es sollte mit
WHERE od.`id_order` =1166,1167, 1168
am Ende der Abfrage gehen aber weit gefehlt.

Share this post


Link to post
Share on other sites
vor 2 Stunden schrieb NSN:

Der Sinn dahinter ist dass es dann eine Art Einkaufsliste ausspuckt welche sagt dass ich für die abgefragten Bestellungen bei Lieferant A von Produkt P 4 Stück brauche, bei Lieferant B von Produkt Q 2 Stück usw.

Im AC kann man Einstellen ob Admin nach einer bestimmten anzahl an Produkten automatisch einen E-Mail bekommt in dem steht das nur noch wenige Anzahl vorhanden ist, dabei kann man auch die Zahl einstellen ab welcher anzahl der Admin informiewrt wird und individuel für jedes Produkt..

Share this post


Link to post
Share on other sites

Ich glaube du hast mich da falsch verstanden.
Ich brauch keine Info wenn der Lagerstand zu gering ist sondern brauche eine Liste wo ich die Artikel von bestimmten Bestellungen aufgelistet habe damit ich weiß bei welchem Lieferant ich von welchem Artikel wie viel brauche. Nicht fürs Lager sondern für die aktuellen Bestellungen.
Wir haben über 700 Artikel im Angebot aber nur wenige davon am Lager. Den Großteil beziehen wir täglich über diverse Lieferanten. Bei nur 1 oder 2 Bestellungen am Tag mit wenigen Artikeln je Bestellung ist es ja kein Problem das händisch zusammen zuschreiben, aber wenn man das bei 10 bis 20 machen muss und dann noch bunt gefächerte Artikel drin sind ist das doch ein größerer Zeitaufwand.

Share this post


Link to post
Share on other sites

hi NSN, Du möchtest den übesicht über die Bestellungen haben damit du Rechtzeitig beim Lieferanten nachbestellen kannst ?

Auch die Rechtzeitige individuelle Produkt Bestellungen beim Lieferanten erledigt Prestashop Automatisch nach Einstellung im AC, dabei kannst du die menge und Lieferanten auch einstellen.

Gruß

Sf

 

Share this post


Link to post
Share on other sites
vor 4 Stunden schrieb NSN:

ch dachte es sollte mit
WHERE od.`id_order` =1166,1167, 1168
am Ende der Abfrage gehen aber weit gefehlt.

Du stellt die WHERE Bedingung vor die GROUP Anweisung, als Operator das "=" und fragst eine Bedingung ab, weitere dann mit OR anhängen

SELECT s.name AS Lieferant, od.id_order,  od.product_reference AS ArtNr, od.product_name AS Artikel, SUM(od.product_quantity) AS Menge
    FROM ps_order_detail od
    LEFT JOIN ps_product p ON (p.id_product = od.product_id)
    LEFT JOIN ps_supplier s ON (s.id_supplier = p.id_supplier)
WHERE od.id_order=1166 OR od.id_order=1167
GROUP by od.product_name 
ORDER BY  s.name ASC

Ggfs kannst du auch einen anderen Operator verwenden wie z.B.: >1166

Grüsse
Whiley

 

 

Share this post


Link to post
Share on other sites

Danke Whiley. Du hast mir grad viel Kopfschmerzen und Zeit erspart.
Ich hab beide Varianten, also mit "=" Bedingung (jetzt weiß ich ja dass das immer nur eine Bedingung sein kann) sowie mit " > " versucht und erhalte genau was ich wollte.
Die Sortierung habe ich wie folgt erweitert "ORDER BY  s.name ASC, od.product_name ASC" damit die Produkte auch innerhalb der Lieferanten sortiert sind.

Viele Grüße
Stefan

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More