Forum Doku Wiki Blog

Forumsarchiv 2007, Dezember
Probleme mit SQL-Query

archivierte Beiträge lesen

  1. (DATENBANK) Probleme mit SQL-Query von Ole, 27. 12. 2007, 15:24

Probleme mit SQL-Query

Der folgende Beitrag wurde am 27. 12. 2007, 15:24 Uhr von Ole veröffentlicht.

Hallo,

ich habe einen kleinen Knoten im Hirn und hoffe, dass ihr mir helfen könnt den zu lösen.

Aus unserem xtCommerce Webshop sollen Daten aus der Datenbank in SAP B1 übergeben werden. Im Prinzip auch kein Problem, nur an einer Stelle hapert es grade etwas.

In der mySQL-Datenbank (v4) gibt es für Bestellungen von Artikeln mit Varianten die Tabelle "orders_products_attributes" in welcher zu jedem bestellten Artikel die Varianten hinterlegt werden.

Nun gibt es Artikel bei uns, bei denen dort 4 Zeilen eingetragen werden. Die Datenfelder sind:

orders_products_attributes_id (auto increment, primärschlüssel)
orders_id (bezieht sich auf die Bestellung)
orders_products_id (bezieht sich auf einen Artikel einer Bestellung)
products_options (Name der Variante)
products_options_values (Wert der Variante)
options_values_price (Preis der Variante)
price_prefix (Vorzeichen für options_values_price bezogen auf den Basispreis)
products_attributes_model (Artikelnummer der Variante)

Nun suche ich nach einer Möglichkeit eine SQL-Query zu formulieren, die mir für jeden Artikel nur eine Zeile mit den relevanten Daten zurückliefert.

Dreh- und Angelpunkt dürfte "orders_products_id" sein.

Von den 4 zurückgelieferten Datensätzen, brauche ich aus dem ersten "products_attributes_model", "products_options" und "products_options_values". Von den Zeilen 2-4 jeweils nur "products_options" und "products_options_values" und von Zeile 2 zusätzlich noch "options_values_price"

Der zurückgelieferte Datensatz sähe idealerweise etwa so aus:

"orders_id", "orders_products_id", "products_attributes_model", "products_options_1", "products_options_values_1", "options_values_price_1", "products_options_2", "products_options_values_2", "options_values_price_2","products_options_3", "products_options_values_3","products_options_4", "products_options_values_4"

Ist das mit SQL machbar? wenn ja, wie?

Danke
Ole
(8-)>

--
Das Wort Vegetarier kommt aus dem Indianischen und bedeutet: Zu dumm zum Jagen.

Probleme mit SQL-Query

Der folgende Beitrag wurde am 27. 12. 2007, 15:32 Uhr von Ilja veröffentlicht.

yo,

zwischen 4.0 und 4.1 gibt es "gewaltige" unterschiede, welche server version benutzt ihr den ?

Ilja

Probleme mit SQL-Query

Der folgende Beitrag wurde am 27. 12. 2007, 15:43 Uhr von Ole veröffentlicht.

Hi

> zwischen 4.0 und 4.1 gibt es "gewaltige" unterschiede, welche server version benutzt ihr den ?

Wenn ich das richtig sehe Version 4.1.22

Gruß
Ole
(8-)>

--
Das Wort Vegetarier kommt aus dem Indianischen und bedeutet: Zu dumm zum Jagen.

Probleme mit SQL-Query

Der folgende Beitrag wurde am 28. 12. 2007, 09:59 Uhr von Ilja veröffentlicht.

yo,

> Wenn ich das richtig sehe Version 4.1.22

war viel auf arbeit zu tun, bin noch nicht zu einer antwort gekommen, aber 4.1 hört sich gut an. kannst du mir noch beispiele geben, mit den vier datensätze, wie sie dann in einem datensatz aufgelöst werden sollen ? dann sollte die abfrage kein problem sein.

Ilja

Probleme mit SQL-Query

Der folgende Beitrag wurde am 28. 12. 2007, 12:04 Uhr von Ole veröffentlicht.

Hallo Ilja,

> war viel auf arbeit zu tun, bin noch nicht zu einer antwort gekommen, aber 4.1 hört sich gut an. kannst du mir noch beispiele geben, mit den vier datensätze, wie sie dann in einem datensatz aufgelöst werden sollen ? dann sollte die abfrage kein problem sein.

Vielen Dank schon mal für deine Mühen.

Hier mal die Datensätze:

orders_products_attributes_id, orders_id, orders_products_id, products_options, products_options_values, options_values_price, price_prefix,  products_attributes_model
6, 3, 7, Griffstärke, SL, 0, +, 0060000004200006
7, 3, 7, Besaiten, Ja, 6,7226, +, 9999999999999999
8, 3, 7, Härte (quer), 22kg, 0, +, 0,
9, 3, 7, Härte (längs), 27kg, 0, +, 0,

Mein Traumdatensatz würde jetzt so aussehen:

3, 7, 0060000004200006, Griffstärke, SL, 0, +, Besaiten, Ja, 6,7226, +, Härte (quer), 22kg, Härte (längs), 27kg

Danke & Gruß
Ole
(8-)>

--
Das Wort Vegetarier kommt aus dem Indianischen und bedeutet: Zu dumm zum Jagen.

Probleme mit SQL-Query

Der folgende Beitrag wurde am 28. 12. 2007, 12:52 Uhr von Rouven veröffentlicht.

Hello,

> Mein Traumdatensatz würde jetzt so aussehen:
> 3, 7, 0060000004200006, Griffstärke, SL, 0, +, Besaiten, Ja, 6,7226, +, Härte (quer), 22kg, Härte (längs), 27kg
immer? Also, wenn ich deine Datensätze mal d1 bis d4 nenne und die Spalten mal  s1 bis s8, ist dann dein Traumdatensatz IMMER
d1.s2, d1.s3, d1.s8, d1.s4, d1.s5, d1.s6, d1.s7, d2.s4, d2.s5, d2.s6, d2.s7, d3.s4, d3.s5, d4.s4, d4.s5

Wenn nein: vergiss es, die Logik, die hinter dem Datensatz steckt, ist zu verworren und nur für das menschliche Auge lösbar.
Wenn ja (oder es zumindest ein generell gültiges Kriterium gibt): vielleicht(!) gibt es eine Lösung, allerdings nur, wenn die Anzahl der beteiligten Attribute feststeht, ebenso wie ihre Reihenfolge und vor allem warum manchmal eine Spalte übernommen wird und manchmal nicht. Aber alles in allem: mein Bauch sagt, dass du mit SQL keine befriedigende Lösung dafür finden wirst.

MfG
Rouven

--
-------------------
sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)

He is entertaining both out of the car and in the car because if you tell him that a corner is almost flat then he is the guy who is going to try to take it flat even if it means shunting it the other side of it, he will come with the data and say 'hey, I may have crashed and destroyed the car, but I was flat-out'. That is an interesting quality that he has!  --  Team Member on Jacques Villeneuve

Probleme mit SQL-Query

Der folgende Beitrag wurde am 28. 12. 2007, 13:09 Uhr von Ole veröffentlicht.

Hallo Rouven,

> immer?

Ja

> Also, wenn ich deine Datensätze mal d1 bis d4 nenne und die Spalten mal  s1 bis s8, ist dann dein Traumdatensatz IMMER
> d1.s2, d1.s3, d1.s8, d1.s4, d1.s5, d1.s6, d1.s7, d2.s4, d2.s5, d2.s6, d2.s7, d3.s4, d3.s5, d4.s4, d4.s5

Genau

> Wenn ja (oder es zumindest ein generell gültiges Kriterium gibt): vielleicht(!) gibt es eine Lösung, allerdings nur, wenn die Anzahl der beteiligten Attribute feststeht, ebenso wie ihre Reihenfolge und vor allem warum manchmal eine Spalte übernommen wird und manchmal nicht. Aber alles in allem: mein Bauch sagt, dass du mit SQL keine befriedigende Lösung dafür finden wirst.

Die Datensätze sehen immer genau so aus. Gleiche Reihenfolge, nur unterschiedliche Werte für einige Felder.

Danke & Gruß
Ole
(8-)>

--
Das Wort Vegetarier kommt aus dem Indianischen und bedeutet: Zu dumm zum Jagen.

Probleme mit SQL-Query

Der folgende Beitrag wurde am 28. 12. 2007, 13:15 Uhr von Ilja veröffentlicht.

yo,

> Die Datensätze sehen immer genau so aus. Gleiche Reihenfolge, nur unterschiedliche Werte für einige Felder.

dann ist es auch lösbar, eine frage habe ich allerdings noch, woran erkennt man, dass es sich um d1, d2, d3 oder d4 handelt, gibt es ein kriterium, nachdem man es unterscheiden kann, zum beispiel bestimmte spaltenwerte, ein datum oder zur not auch die pk reihenfolge ?

Ilja

Probleme mit SQL-Query

Der folgende Beitrag wurde am 28. 12. 2007, 13:29 Uhr von Ole veröffentlicht.

Hallo

> dann ist es auch lösbar, eine frage habe ich allerdings noch, woran erkennt man, dass es sich um d1, d2, d3 oder d4 handelt, gibt es ein kriterium, nachdem man es unterscheiden kann, zum beispiel bestimmte spaltenwerte, ein datum oder zur not auch die pk reihenfolge ?

Das Feld "products_options" enthält immer die gleichen vier Werte "Griffsträke", "Besaiten", "Härte (längs)" oder "Härte (quer)". Die zusammengehörigkeit der 4 Datensätze ergibt sich über den Wert von "orders_products_id".

Danke & Gruß
Ole
(8-)>

--
Das Wort Vegetarier kommt aus dem Indianischen und bedeutet: Zu dumm zum Jagen.

Probleme mit SQL-Query

Der folgende Beitrag wurde am 28. 12. 2007, 13:56 Uhr von Ilja veröffentlicht.

yo,

ich kann ja mal einen lösungsweg andeuten, vielleicht reicht dir das ja schon. wenn nicht kann ich dir auch die komplette abfrage erstellen.

1. Nimm alle datensätze mit den wert griffstärke (WHERE klausel), dann hast du schon mal die richtige anzahl an datensätze 1/4.

2. du gibts die spalten für den datensatz mit den griffstärken an (SELECT)

3. du bindest die anderen spalten mit dem jeweiligen wert in der products_options spalte mit unterabfragen ein, wobei die unterabfrage korreliert mit der orders_products_id spalte

...fertig

Ilja

Probleme mit SQL-Query

Der folgende Beitrag wurde am 28. 12. 2007, 17:35 Uhr von Ole veröffentlicht.

Hallo Ilja,

ich habe nun ein paar Stunden versucht zu verstehen, was du mir da aufgeschrieben hast...Google bemüht, Bücher gewälzt...leider ohne Erfolg :(

1. würde ich so verstehen:
SELECT FROM table where products_options = "griffstärke"

Für den Rest reicht mein Verständniss für SQL scheinbar nicht aus :(

Danke & Gruß
Ole
(8-)>

--
Das Wort Vegetarier kommt aus dem Indianischen und bedeutet: Zu dumm zum Jagen.

Probleme mit SQL-Query

Der folgende Beitrag wurde am 28. 12. 2007, 19:34 Uhr von Rouven veröffentlicht.

Hello,

> Für den Rest reicht mein Verständniss für SQL scheinbar nicht aus :(
helfen vielleicht die Beispiele für korrelierte Unterabfragen im MySQL-Handbuch?

MfG
Rouven

--
-------------------
sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)

Buy when there's blood running in the street and sell when everyone is pounding at your door, clawing to own your equities  --  Wisdom on Wallstreet

Probleme mit SQL-Query

Der folgende Beitrag wurde am 28. 12. 2007, 21:06 Uhr von Ole veröffentlicht.

Nabend,

> helfen vielleicht die Beispiele für korrelierte Unterabfragen im MySQL-Handbuch?

Über die bin ich auch schon gestolpert. Werde noch mal eine Nacht darüber schlafen um dann zu sehen, ob ich es dann verstehe.

Danke & Gruß
Ole
(8-)>

--
Das Wort Vegetarier kommt aus dem Indianischen und bedeutet: Zu dumm zum Jagen.

Probleme mit SQL-Query

Der folgende Beitrag wurde am 29. 12. 2007, 00:10 Uhr von Ilja veröffentlicht.

yo,

hier mal ein beispiel, die beiden unterabfragen kannst du für die beiden anderen fälle erweitern.

SELECT t1.orders_id, t1.orders_products_id, t1.products_attributes_model,
       t1.products_options, t1.products_options_values,
       t1.options_values_price, t1.price_prefix,
       (SELECT t2.products_options
        FROM tabelle t2
        WHERE t2.products_options = 'Besaiten'
        AND t2.order_id = t1.order_id
       ),
       (SELECT t2.products_options_values
        FROM tabelle t2
        WHERE t2.products_options = 'Besaiten'
        AND t2.order_id = t1.order_id
       )
FROM tabelle t1
WHERE t1.products_options = 'Griffstärke'
;

Ilja

Probleme mit SQL-Query

Der folgende Beitrag wurde am 29. 12. 2007, 07:22 Uhr von Ole veröffentlicht.

Guten Morgen,

> SELECT t1.orders_id, t1.orders_products_id, t1.products_attributes_model,
>        t1.products_options, t1.products_options_values,
>        t1.options_values_price, t1.price_prefix,
>        (SELECT t2.products_options
>         FROM tabelle t2
>         WHERE t2.products_options = 'Besaiten'
>         AND t2.order_id = t1.order_id
>        ),
>        (SELECT t2.products_options_values
>         FROM tabelle t2
>         WHERE t2.products_options = 'Besaiten'
>         AND t2.order_id = t1.order_id
>        )
> FROM tabelle t1
> WHERE t1.products_options = 'Griffstärke'
> ;

Großartig :) ...ich glaube ich verstehe es jetzt. Ich werde das mal weiter austüfteln :)

Vielen, vielen Dank :)

Gruß
Ole
(8-)>

--
Das Wort Vegetarier kommt aus dem Indianischen und bedeutet: Zu dumm zum Jagen.

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4