Alltimefriend: Problem bei SQL mit Beziehungen

Hallo Leute!

Folgende 3 DB-Tabellen hab ich:

Table "Adressen":

ID   FIRMA
----------
1    Müller Papier
2    Mustermann Müllverwertung
3    Videothek Brüller
4    Art-Tec Software
5    Gasthaus Rose
6    Finanzamt Müllerstr.

Table "Selektionen":

ID   SELNAME
------------
1    Kunde
2    Lieferant
3    Amt
4    Aktiv
5    Passiv

Table "SelektionsZuordnung":

AID  SID
-----------------
1    2
1    4
2    1
2    5
5    1
5    4
3    1
3    4
4    2
4    5
6    3

Nun suche ich nach "üll", hier gäbe es 4 Adressen (IDs 1, 2, 3 und 6), doch möchte ich nur aktive Kunden und Lieferanten anzeigen, inkl. deren Selektionsnamen.

Also kann das Ergebnis so aussehen:

Firma                 Selektionen
---------------------------------
Müller Papier         Lieferant, aktiv
Videothek Brüller     Kunde, aktiv

Ich muss zugeben, dass ich beim SQL total anstehe ;o( Liegt wohl am Wochenanfang, aber vielleicht ist ja jemand etwas wacher als ich *ggg*

lg, Alltimefriend

  1. Kurios:

    Hab nun mal die Anzeige der einzelnen Selektionen rausgelassen, ich brauche sie ja eignetlich nur für die Selektierung (klingt logisch, nicht? *ggg*).

    Folgendes SQL funktioniert:

    SELECT Adressen.Firma as Firma FROM Kunden, SelektrionsZuordnung WHERE SelektionsZuordnung.AID = Adressen.ID AND (SelektionsZuordnung.SID = 1 AND SelektionsZuordnung.SID = 4) OR (SelektionsZuordnung.SID = 2 AND SelektionsZuordnung.SID = 5)

    So hab ich aber die Sucheingabe "üll" noch nicht drinnen, also hänge ich ein " AND Adressen.Firma LIKE '%üll%'" dran, und da erhalte ich folgenden SQL-Fehler:

    You have an error in your SQL syntax near ''%üll%'

    Hab extra nochmal nachgesehen, das Feld ist 'varchar' also müsste die Syntax stimmen.

    Fällt trotzdem jemand ein Fehler auf? Es ist übrigens bei allen Adressen-Feldern, die ich nicht mit anderen Tabellen-Feldern vergleiche.
    Ich hab in der Produktiv-Datenbank zB. noch ein Feld "Typ", das F wie Firma, oder P wie Person symbolisiert. Auch wenn ich das noch angebe, kommt der gleiche Fehler und weist auf das 'F' oder 'P' hin.

    lg, ATF

    1. Hallo,

      Folgendes SQL funktioniert:

      SELECT Adressen.Firma as Firma FROM Kunden, SelektrionsZuordnung WHERE SelektionsZuordnung.AID = Adressen.ID AND (SelektionsZuordnung.SID = 1 AND SelektionsZuordnung.SID = 4) OR (SelektionsZuordnung.SID = 2 AND SelektionsZuordnung.SID = 5)

      Es wundert mich sehr, dass dieses Statement funktioniert, da doch Felder von Tabellen abgefragt werden, die nicht in der FROM-Klausel aufgeführt werden.
      Ausserdem verstehe ich nicht wie das Feld SelektionsZuordnung.SID gleichzeitig zwei Werte (1 und 4 bzw 2 und 5) annehmen kann.

      Grüße
        Klaus

  2. yo,

    Nun suche ich nach "üll", hier gäbe es 4 Adressen (IDs 1, 2, 3 und 6), doch möchte ich nur aktive Kunden und Lieferanten anzeigen, inkl. deren Selektionsnamen.

    ich vermute mal, dein erstes problem ist schlechtes datenbank-design. ob eine adresse aktiv oder passiv ist und auch die selektion kann meiner meinung nach in einer tabelle untergebracht werden, da es sich auf den ersten blick um 1:1 beziehungen handelt.

    eine firma wird nun nicht gleichzeitig aktiv und passiv sein und aller wahrscheinlichkeit wird sich auch nur eine selektion haben, also entweder kunde, amt oder lieferant, wobei hier eventuell auch mehrfachauswahl sein könnte, wovon ich aber erst mal nicht ausgehe.

    mein tip, pack das alles in enine tabelle und alles wird gut.

    Ilja

    1. yo,

      err nicht 1:1, sondern 1:n beziehungen. aber trotzdem kann man das in diesem speziellen falle in tabelle zusammenfassen oder wenn gewünscht eben zwei tabllen. drei erscheinen mir aber zuviel des guten...

      Ilja

      1. Hallo Ilja!

        yo,

        err nicht 1:1, sondern 1:n beziehungen. aber trotzdem kann man das in diesem speziellen falle in tabelle zusammenfassen oder wenn gewünscht eben zwei tabllen. drei erscheinen mir aber zuviel des guten...

        Das schlechte DB-Design ist mir selbst bereits aufgefallen, jedoch ist es nicht von mir, sondern wurde mir so vorgelegt. Ich habe keine Berechtigung, Änderungen daran vorzunehmen.

        lg, ATF

        1. yo,

          Das schlechte DB-Design ist mir selbst bereits aufgefallen, jedoch ist es nicht von mir, sondern wurde mir so vorgelegt. Ich habe keine Berechtigung, Änderungen daran vorzunehmen.

          das ist immer schlecht, aber dann muss man das beste draus machen. ich würde so wie du stückweise rangehen. mein erster gedanke wäre eventuell ein zeichen problem mit den ' oder ". zum anderen würde ich mal das LIKE weglassen und es auf gleichheit einer Firma prüfen, ob er dann immer noch eine fehlermeldung ausgibt, da auch dort ein string verwendet wird, aber eben nicht das LIKE. so kan man sich dem problem vielleicht annähern. eine andere frage wäre noch, welches dbms du benutzt und wie du drauf zugreifst.

          Ilja

          1. Hallo

            das ist immer schlecht, aber dann muss man das beste draus machen. ich würde so wie du stückweise rangehen. mein erster gedanke wäre eventuell ein zeichen problem mit den ' oder ". zum anderen würde ich mal das LIKE weglassen und es auf gleichheit einer Firma prüfen, ob er dann immer noch eine fehlermeldung ausgibt, da auch dort ein string verwendet wird, aber eben nicht das LIKE. so kan man sich dem problem vielleicht annähern. eine andere frage wäre noch, welches dbms du benutzt und wie du drauf zugreifst.

            Nun, ich hab ja schon ein SQL erstellt, mit dem ich einfach alle Firmen mit den bestimmten Zuordnungen aufliste.
            Doch sobald ich noch ein "and Adressen.Firma LIKE '%üll%'" anhänge, kommt ein SQL-Syntax-Fehler, doch was ist daran falsch?

            SELECT Adressen.Firma as Firma FROM Kunden, SelektrionsZuordnung WHERE SelektionsZuordnung.AID = Adressen.ID AND (SelektionsZuordnung.SID = 1 AND SelektionsZuordnung.SID = 4) OR (SelektionsZuordnung.SID = 2 AND SelektionsZuordnung.SID = 5) AND Adressen.Firma LIKE '%üll%'

            Ich hab sonst mit dem LIKE nie Probleme gehabt, auch bei "Verschachtelungen" nicht. Komisch.

            lg, ATF

            Achja, greife mit PHP auf MySQL zu. Hatte das komplett vergessen anzugeben, sorry ;o(

            1. yo,

              SELECT Adressen.Firma as Firma FROM Kunden, SelektrionsZuordnung WHERE SelektionsZuordnung.AID = Adressen.ID AND (SelektionsZuordnung.SID = 1 AND SelektionsZuordnung.SID = 4) OR (SelektionsZuordnung.SID = 2 AND SelektionsZuordnung.SID = 5) AND Adressen.Firma LIKE '%üll%'

              das könnte am den AS Firma liegen. versuch mal das AS Firma wegzulassen. Es kann sein, dass wenn du ein Alias setzt, so auch die spalte in der WHERE Klausel ansprechen musst.

              Ilja

              1. das könnte am den AS Firma liegen. versuch mal das AS Firma wegzulassen. Es kann sein, dass wenn du ein Alias setzt, so auch die spalte in der WHERE Klausel ansprechen musst.

                Leider nicht, habs auch schon ohne probiert ;o( Ausserdem hab ich es auch mit anderen Feldern versucht, die ich im SELECT nicht definiert hab, und da ging es auch nicht.

                1. yo,

                  hmm, kniffelig, geht den der LIKE Operator, wenn du de Joker mal wegläßt also AND spaltename LIKE 'Test' ? vielleicht mag dein dbms die platzhalter ncht, bzw. will andere habn, wobei ich daran nicht so recht glauben will bei mysql. ich habe immer noch die vermutung, etwas mit den hochkommata stimmt nicht.

                  Ilja