Announcement

Collapse
No announcement yet.

Select über mehrere Zeile mit AND

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Select über mehrere Zeile mit AND

    Hallo,

    Ich wollte ein dynamisches Attributs-System für Artikel aufbauen. Es geht also darum Artikeln Attribute wie z.B. farbe, groesse, gewicht etc. zu geben.
    Da ich nun keine Tabelle anlegen möchte in der Art spalte1=Art-Nr,spalte2=farbe,spalte3=groesse etc... sondern die Möglichkeit haben wollte, ohne die Struktur der Tabelle zu Ändern, neue Attribute hinzuzufügen, habe ich eine Tabelle der Art spalte1=Art-Nr,spalte2=Attribute-Name,spalte3=Attribute_Wert gemacht.
    Nun habe ich aber ein für mich nicht lösbares Problem wenn ich nach Artikeln mit bestimmten Attributen suche.

    Hier mal ein Beispiel-Tabelle



    Wenn ich nun die Artikel selektieren will die nur rot sind ist das ja kein Problem. Sobald ich aber Artikel nach mehreren Attributen selektieren will z.B. farbe=rot und gewicht=10 etc. bin ich SQL technisch am Ende.
    Sowas in der Art (funktioniert ja so nicht)
    select artnr from artikel where (atr_name=farbe and atr_wert=rot) and (atr_name=gewicht and atr_wert=10)
    Ist sowas Üerhaupt in SQL mölich?
    Wie muesst der Query den ausschauen damit er alle artnr liefert auf die diese Bedingungen zutreffe?
    Mittlerweile bin ich auf eine Löung gekommen sie erscheint mir aber wenig praktikabel da ich glaub das es ziemlich auf die Performance geht.
    Und zwar
    select artnr from artikel as a1, artikel as a2 where a1.artnr=a2.artnr and a1.atr_name='farbe' and a1.atr_wert='rot' and a2.atr_name='groesse' and a2.atr_wert='10'
    nun koennte ich ja fü jedes Attribute das hinzukommt den from Teil und den Where Teil erweitern. Die Frage ist ob das sinnvoll ist wenn ich nun 10 oder 100 Attribute habe.
    Attached Files

  • #2
    Originally posted by ink View Post
    Hallo,

    Ich wollte ein dynamisches Attributs-System für Artikel aufbauen.

    .....
    Die Frage ist ob das sinnvoll ist wenn ich nun 10 oder 100 Attribute habe.
    - Das haben schon viele versucht. Bitte mach es NICHT so, sondern erstelle ein sauberes Datenmodell und behandle die Datenbank niciht als Black-Box...


    Gruss

    Comment


    • #3
      Hallo ink,

      Abfragen dieser Art werden i.a.R mit einem WHERE IN gelöst.

      Wenn du also alle Artikel benötigst, die rot sind und ein Gewicht von 10 haben, dann wäre dies so möglich:

      [highlight=sql]
      select * from artikel art
      where art.artnr in (
      select attr.artnr
      from attribute
      where attr.atr_name = 'farbe' and attr.atr_wert = 'rot')
      and art.artnr in (
      select attr.artnr
      from attribute
      where attr.atr_name = 'gewicht' and attr.atr_wert = '10')
      [/highlight]

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Hallo Falk,
        klappt bestens so. Vielen Dank für deine Hilfe.
        Gruß Ingo

        Comment

        Working...
        X