SQL Abfrage mit where

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

  • SQL Abfrage mit where

    Ich habe ein Problem mit der Realisierung einer SQL-Abfrage in Verbindung mit einem array und muss etwas weiter ausholen.

    In der Table x_1 sind Datensätze enthalten. Jeder Datensatz hat logischerweise eine ID. In der Tabelle x_2 sind ebenfalls Datensätze gespeichert, die in Beziehung zu Tabelle x_1 stehen sollen,

    Dort sollen Sachverhalte gespeichert werden, die dann bei der Abfrage an verschiedene Datensätze aus Tabelle x_1 gehangen werden.

    Hierzu wird pro Datensatz in Tabelle x_2 die ID der entsprechenden Datensätze aus Tabelle x_1 übergeben.

    Beispiel:
    Datensatz 1der Tabelle x_2 bekommt 1,3,4,5 im Feld bezug_x_1

    Das bedeutet, dass bei einer Abfrage die Datensätze 1,3,4,5 aus Tabelle x_1 alle den Sachverhalt 1 angezeigt bekommen.

    In diesem Fall müsse ja die SQL-Abfrage so aussehen:

    PHP-Code:
    $abfrage "
    SELECT * FROM tabelle_x_2 
    WHERE bezug_x_1='"
    .$datensatz_id_x_1."'
    "

    Nun ist aber das Problem, dass bezug_x_1 ein array ist, welches durch Komma getrennt ist. Ich weiß momentan keinen Lösungsweg, der bei der Abfrage prüft, ob die id_x_1 in diesem array enthalten ist.

    Geht das nur, indem ich erst alle Datensätze komplett einlese und dann das komplette Datenbankarray nochmal durchsuchen lasse und nun das ausgelesene array
    PHP-Code:
    $abfrage['bezug_x_1'
    einzeln abfrage?

  • #2
    Such mal nach Normalisierung, bei Google, Wikipedia oder auch hier im Forum.

    Wenn das nicht hilft (aber das hilft garantiert! ), dann versuche es mit "WHERE ... IN(".implode(', ', $foobar).")".

    Kommentar


    • #3
      Hallo,

      naja gleich mit Normalformen auf des Problem loszugehen find ich übertrieben. Eine einfache Lösung wäre hier eine Procedur. Hier kannst du das Array auslesen und auch Statements wie if, while odere switch verwenden. Nachzulesen unter: SQL Tutorial

      Kommentar


      • #4
        naja gleich mit Normalformen auf des Problem loszugehen find ich übertrieben
        Sehe ich auch so, habs jetzt so gelöst, dass die ID's in einem Feld folgendermaßen gespeichert werden.

        ,1;,2;,14;,5;

        Dann kann man einfach mit LIKE suchen.
        PHP-Code:
        $abfrage "
        SELECT * FROM tabelle_x_2 
        WHERE bezug_x_1 LIKE '%,"
        .$datensatz_id_x_1.";%'
        "

        Ist vielleicht nicht professionell, aber funktioniert und konnte ohne große Änderungen in der DB-Struktur realisiert werden.
        Zuletzt geändert von Daniel1975; 26.01.2006, 15:51.

        Kommentar


        • #5
          Unprofessionell auf jeden Fall ... aber vor allem auch vollkommen blöde ... weil so aber auch jede Indizierung ausgehebelt wird ... Glückwunsch ... und viel Spass im Troll-Land ... !
          carpe noctem

          [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
          [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

          Kommentar


          • #6
            Unprofessionell auf jeden Fall ... aber vor allem auch vollkommen blöde ... weil so aber auch jede Indizierung ausgehebelt wird ... Glückwunsch ... und viel Spass im Troll-Land ... !
            Oh man, solche Kommentare bringen mich sicher weiter.

            Die Datensätze sind ja einzeln indiziert. Das heißt der Datensatz mit der id = 1 bekommt lediglich im Feld 2 die Verbindung zu anderen Datensätzen. Ich frage mich, was da so falsch bzw. "Troll-Land"-mäßig sein soll. Ansgesprochen werden die Datensätze nach wie vor über die "index"-id.

            Leute runtermachen ist eben relativ einfach, nen brauchbaren Lösungsansatz geben eben nicht.

            Kommentar


            • #7
              @goth

              Mach mal nen besseren Vorschlag. Wie sollte ich die Tabellen aufbauen.

              Derzeit:

              Tabelle_Objekte (Felder)

              id_o | name | beschreibung

              Tabelle_Sachverhalte (Felder)

              id_s | bezug_id_o | sachverhalt

              Wie bekomme ich ne Beziehung (ohne 3. Tabelle) hin, dass man einen Sachverhalt mehreren Objekten zuordnen kann?

              Derzeit: Beispiel

              Objekt id_o = 1
              Objekt id_o = 2
              Objekt id_o = 3 ...

              Für den Sachverhalt 1 wäre dann der Bezug für Objekt 1 und 3 zu setzen:

              bezug_id_o = ,1;,3;

              Ist das wirklich so Troll-Land-mäßig. So kann ich zum einen bei ner Objektsuche alle zugehörigen Sachverhalte auslesen und auch über den Sachverhalt die verküpften Objekte bestimmen...

              Kommentar


              • #8
                was spricht gegen die normalisierung? zu normal?

                Kommentar


                • #9
                  Dagegen spricht nichts, aber das wäre doch nur über eine dritte Tabelle lösbar, die eine derarte Zuordnung zulässt - oder ?

                  Kommentar


                  • #10
                    wenn sachverhalte auf mehrere objekte zutreffen, gleichzeitig objekte aber auch mehrere sachverhalte haben können, dann brauchst du die 3. Tabelle.

                    Kommentar


                    • #11
                      richtig, dann gäbe es ne dritte tabelle die dann z.b.

                      3. Tabelle - Beziehung Sachverhalte|Objekte

                      id 1 | id_sachverhalt_1 | id_objekt_1
                      id 2 | id_sachverhalt_1 | id_objekt_3
                      id 3 | id_sachverhalt_1 | id_objekt_5
                      id 4 | id_sachverhalt_2 | id_objekt_1
                      id 5 | id_sachverhalt_2 | id_objekt_5
                      id 6 | id_sachverhalt_3 | id_objekt_6...

                      Das wollte ich aber umgehen. Und denke, dass die o.a. Variante fürs Intranet genügt oder hat goth mit seiner Bemerkung recht, dass diese Variante ins Troll-Land gehört.

                      Kommentar


                      • #12
                        "troll" ist goth-spezifisch.

                        Aber er hat dennoch recht, dass du jegliche Indizierung zunichte machst.

                        Kommentar


                        • #13
                          Woher die Abneigung gegen eine dritte Tabelle? Kostet doch nichts.

                          Kommentar


                          • #14
                            Habs jetzt mit ner 3. Tabelle realisiert, da lassen sich die Datensätze wirklich besser administrieren. Ich geb zu, dass die o.a. Situation bei der Administrierung unglücklich aber nicht "trollig" ist.

                            Kommentar

                            Lädt...
                            X