Ankündigung

Einklappen
Keine Ankündigung bisher.

Nachbarvarianten auswählen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Nachbarvarianten auswählen

    Liebes Forum

    ich komme einfach zu keiner Lösung.
    Ich möchte schnell eine Datenbankauswertung machen.
    Ich habe eine Tabelle (Varianten), in der den Varianten Optionen zugeordnet werden.
    varianten_id | option_id
    10 | 1
    10 | 11
    10 | 21
    11 | 1
    11 | 11
    11 | 22
    12 | 1
    12 | 11
    12 | 23

    13 | 1
    13 | 12
    13 | 21
    14 | 1
    14 | 12
    14 | 22
    ...
    105 | 7
    105 | 15
    105 | 23

    Ich hoffe der Aufbau der Tabelle wird deutlich. Nehmen wir an ich habe jetzt die Variante 12 mit den Optionen 1/11/23 ausgewählt. Dann möchte ich aus der Tabelle gerne alle Varianten filtern, die entstehen, wenn man jeweils eine Option ändert und in einer Tabelle speichern, die als key diese Option besitzt. Es wären also die Optionen
    1 / 11 / (21 ... 23)
    1 / (11 ... 15) / 23
    (1 ... 7) / 11 / 23
    also 15 Varianten.

    Ich möchte das gerne direkt mit der Datenbankabfrage schaffen, mir fällt da aber absolut keine Abfrage ein, mit der das geht. (Als Notlösung könnte man natürlich die ganze Tabelle laden und dann das ganze mit php auswerten, was aber nicht sachgemäß wäre.) Hier ist die Anzahl der Optionen 3. Sie kann aber belibig groß sein (1 ...).

    Ein Beispiel:
    Nehmen wir an, es handelt sich bei dem Artikel um "Lampen" und man kann sich verschiedene Dinge (Optionsgruppen) auswählen. In dem Beispiel sind es 3 Optionsgruppen:
    Optionsgruppe1 steht zum Beispiel für die "Größe" der Lampe und kann die Werte 1 ... 7 haben.
    Optionsgruppe2 steht für die "Form" des Lampenfusses mit den möglichen Werten 11 ... 15 und
    Optionsgruppe3 für "Muster" des Lampenfusses mit den Werten 21...23.

    Beispielsweise für die Variante 12 stehen in der Tabelle oben die drei Einträge (Optionen) 1/11/23. Das entspricht den Optionen Größe: klein / Form: rund / Muster: kariert.

    Als Ergebnis der SQL-Abfrage möchte ich gerne ein array mit den Varianten haben, die sich genau in einer Optionsgruppe unterscheiden. Der key des arrays soll die Option sein.

    (Anmerkung: Eine kleine Erschwernis kommt hinzu: Bei den Einträgen oben handelt es sich um Varianten eines Artikels. Es gibt jedoch mehrere Artikel mit solchen Varianten. Die Zuordnung der Varianten zu den Artikeln erfolgt in einer anderen Tabelle. Ich müsste also noch zusätzlich eine Abfrage machen, mit der ich die Varianten des Artikels abfrage. Das könnte aber erst später oder mit php geschehen.)


  • #2
    Zitat von Kerstin83 Beitrag anzeigen
    Liebes Forum

    ich komme einfach zu keiner Lösung.
    1 / 11 / (21 ... 23)
    1 / (11 ... 15) / 23
    (1 ... 7) / 11 / 23
    also 15 Varianten.
    Keine Ahnung, ob ich Dich richtig verstehe, zu wirr sind Deine Worte.

    Aber vielleicht so. Du hast:

    Code:
    test=*# select * from kerstin ;
     v_id | o_id
    ------+------
       10 |    1
       10 |   11
       10 |   21
       11 |    1
       11 |   11
       11 |   22
       12 |    1
       12 |   11
       12 |   23
       13 |    1
       13 |   12
       13 |   21
    (12 rows)
    und suchst

    Code:
    test=*# select distinct o_id from kerstin ;
     o_id
    ------
       23
        1
       22
       21
       11
       12
    (6 rows)
    Wie gesagt, zu wirr sind Deine Worte. Mir ist nicht klar, wie die einzelnen Datensätze logisch in Verbindung stehen und was Du da auswerten willst.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Wie gesagt, zu wirr sind Deine Worte. Mir ist nicht klar, wie die einzelnen Datensätze logisch in Verbindung stehen und was Du da auswerten willst.
      Same here. Frage ist komplett unverständlich.
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        Sorry, sorry, wenn das nicht klar war, vielen Dank für den Hinweis. Dann versuche ich es einmal mit einem Beispiel zu erläutern:
        Nehmen wir an, es handelt sich bei dem Artikel um "Lampen" und man kann sich verschiedene Dinge (Optionsgruppen) auswählen. In dem Beispiel sind es 3 Optionsgruppen:
        Optionsgruppe1 steht zum Beispiel für die "Größe" der Lampe und kann die Werte 1 ... 7 haben.
        Optionsgruppe2 steht für die "Form" des Lampenfusses mit den möglichen Werten 11 ... 15 und
        Optionsgruppe3 für "Muster" des Lampenfusses mit den Werten 21...23.

        Beispielsweise für die Variante 12 stehen in der Tabelle oben die drei Einträge (Optionen) 1/11/23. Das entspricht den Optionen Größe: klein / Form: rund / Muster: kariert.

        Als Ergebnis der SQL-Abfrage möchte ich gerne ein array mit den Varianten haben, die sich genau in einer Optionsgruppe unterscheiden. Der key des arrays soll die Option sein.
        Hoffentlich ist das so deutlicher.

        (ich habe das Beispiel auch oben eingefügt).

        Liebe Grüße
        Kerstin

        Kommentar


        • #5
          Wenn ich das richtig verstehe, bildest Du die Optionsgruppe über die Zehner-Dezimalstelle ab, was typisches schlechtes Datenbankdesign ist und daher unnötig komplizierte Abfragen erfordert. Drösel das auf und die Aufgabe wird viel leichter.
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Die Datenbank entstammt einem CMS-System und kann in seiner Struktur leider nicht verändert werden.
            bildest Du die Optionsgruppe über die Zehner-Dezimalstelle ab
            Ne, das ist nicht so, habe ich hier nur gemacht, um es zu verdeutlichen. War vielleicht ein Fehler. Optionen werden einfach inkremental vergeben. Kommt eine neue hinzu, erhält sie die nächste ID. (Für die Optionsgruppen gibt es noch eine weitere Tabelle, aber die brauche ich für dieses Problem ja nicht.)

            Kommentar


            • #7
              aber die brauche ich für dieses Problem ja nicht.)
              Doch die brauchst Du.
              die sich genau in einer Optionsgruppe unterscheiden.

              [edit] Hmm, ok, Missverständnis. Das Problem ist, dass Du hier inflationär von "Optionsgruppe" redest, aber Option meinst.
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                Ich kann doch nach denjenigen Varianten suchen, die in 2 Optionsgruppen übereinstimmen. Mit php habe ich das zumindest so gemacht.

                Kommentar


                • #9
                  Der key des arrays soll die Option sein.
                  Welche?
                  Als Ergebnis der SQL-Abfrage möchte ich gerne ein array mit den Varianten haben, die sich genau in einer Optionsgruppe unterscheiden.
                  Die Lösung ist doch ganz einfach. Such alle Datensätze die bspw. 2 von 3 Kriterien erfüllen. Die Query dazu wirst DU wohl dynamisch erstellen müssen.
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Zitat von nikosch Beitrag anzeigen
                    Welche?
                    Die options_id, die anders ist.

                    Die Lösung ist doch ganz einfach. Such alle Datensätze die bspw. 2 von 3 Kriterien erfüllen.
                    Genau da komme ich leider nicht drauf, wie ich das machen soll.
                    Man kann ja nicht einfach eine WHERE-Bedingung machen, weil man ja sozusagen mehrere Datensätze zusamenfassen muss.
                    Die Query dazu wirst DU wohl dynamisch erstellen müssen.
                    Ich würde gerne ein statisches Beispiel haben, die Dynamik würde ich dann mit php bauen.

                    Kommentar


                    • #11
                      In dem Beispiel muss man irgendwie diejenigen Varianten herausfiltern, die die Optionen (1 und 11) oder (1 und 23) oder (11 und 23) haben. Die Schwierigkeit liegt darin, dass die Optionen in mehren Zeilen stehen. Ich habe keine Ansatz, wie das gehen könnte.

                      Kommentar


                      • #12
                        Mal kurz schauen, ob ich dich bis hier her verstanden habe.

                        Da wählt jemand ein Lampe in klein rund und karriert.
                        Jetzt sollen ihm ähnliche Beispiele angezeigt werden, zum Beispiel:
                        Lampe klein rund gestreift
                        Lampe groß rund karriert
                        Lampe klein ovaliös karriert
                        usw.

                        Bei drei wählbaren optionen (oder kann man noch mehr wählen?) wobei sich ja optionen wie klein und groß ausschließen, würde ich sagen, du brauchst drei sql abfragen. Das nicht einmal dynamisch. Die könnten dann sogar star sein:

                        "Gib mir alle Artikel welche option1 = wahl1 und option2 = wahl2"
                        "Gib mir alle Artikel welche option1 = wahl1 und option3 = wahl3"
                        "Gib mir alle Artikel welche option2 = wahl2 und option3 = wahl3"

                        So eine art Ähnlickeitsabfrage, so nach dem Motto, dass könnte sie auch interessieren?
                        Die Jatravartiden auf Viltwodl VI können den Kram von dir auch nicht nachvollziehen

                        Kommentar


                        • #13
                          würde ich sagen, du brauchst drei sql abfragen. Das nicht einmal dynamisch. Die könnten dann sogar star sein:
                          OR

                          Die Schwierigkeit liegt darin, dass die Optionen in mehren Zeilen stehen.
                          Dann bau Dir in Vorbereitung erst mal eine Query, die alle perfekten Treffer listet.
                          --

                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                          --

                          Kommentar


                          • #14
                            Zitat von Kerstin83 Beitrag anzeigen
                            Ich würde gerne ein statisches Beispiel haben, die Dynamik würde ich dann mit php bauen.
                            PHP-Code:
                            SELECT
                              varianten_id
                            FROM
                               
                            ...
                            WHERE
                               option_id IN 
                            (1,11,23)
                            GROUP BY
                               varianten_id
                            HAVING
                               COUNT
                            (*) = 

                            Kommentar


                            • #15
                              "Gib mir alle Artikel welche option1 = wahl1 und option2 = wahl2"
                              "Gib mir alle Artikel welche option1 = wahl1 und option3 = wahl3"
                              "Gib mir alle Artikel welche option2 = wahl2 und option3 = wahl3"
                              Ja genau. Wobei die Optionen leider in verschiedenen Zeilen stehen.

                              (Das ganze ist für einen Konfigurator. Nicht für Produkte, die man kaufen kann, wollte aber ein einfaches Beispiel wählen. Man hat sich für eine Variante entschieden und die Tabelle gibt die Varianten an, die man von dieser Auswahl aus mit einem Klick auswählen kann.)

                              Kommentar

                              Lädt...
                              X