Ole: SQl Statement macht probleme

hi

ich nutze ColdFusion und willd ort eine ACCESS Datenbank mit SQl ansprechen.

die entsprechende tabelle (auftrag) hat folgende datenfelder:

ID, EIGNER, KUNDE, NAME, BESCHREIBUNG, USER, ANGELEGT, MODERATOR, BEZEICHNUNG

EIGNER und KUNDE haben eine 1:1 zuordnung, da steht nämlich nur eine zahl drin.
USER hat eine 1:n zuordnung, dort stehen ein oder mehrere zahlen durch komma getrennt
die restlichen datenfelder sind für mein problem erstmal irrelevant, die angesprochenen datenfelder haben das format char bzw. in ACCESS TEXT oder MEMO.

wenn an user an die stelle kommt in der die datenbank abfrage stattfindet hat er u.a. die zwei session variablen #session.eigner# und #session.user_id# im gepäck (lasst euch nicht durch die rauten irritieren, so werden in CFML eben vartiablen dargestellt, nichts besonderes :)).

nun möchte ich aus der tabelle auftrag alle datensätze haben bei denen EIGNER gleich #session.eigner# ist und #session.user_id# im feld KUNDE oder USER vorkommt (oder beides, wäre egal).

mein SQL statement sieht so aus

select * from auftrag where

eigner = '#session.eigner#'
AND
(
kunde = '#session.user_id#'
OR user LIKE '#session.user_id#'
OR user like '#session.user_id#,*'
OR user like '*,#session.user_id#,*'
OR user like '*,#session.user_id#'
)

obwohl es diverse datensätze gibt die ausgegeben werden müßten, da sie die geforderten kriterien erfüllen, bekomme ich nichts zurück :(.
Ist meine Syntax falsch oder liegt der Fehler evtl. woanders?

thx
ole
(8-)>

--
Ein Gedicht: Alles bleibt wie immer... nur schlimmer.\n\nsh:( fo:) ch:| rl:° br:& n4:° ie:% mo:} va:| de:] zu:| fl:( ss:) ls:\ js:|
  1. Servus,

    ohne es böse zu meinen. Bevor Du da weiter machst überdenke mal das DB Modell.

    Das mit dem Like klappt eigentlich schon nur: Du musst % und nicht * angeben.

    Ausserdem sollte diese genügen:

    kunde = %'#session.user_id#'% kein or etc. das erzeugt nur doppelte Ergebnisse bei der suche.

    Gruss matze

    1. hi

      ohne es böse zu meinen. Bevor Du da weiter machst überdenke mal das DB Modell.

      hab ich so übernommen, würd ich persönlich auch anders machen, aber das jetzt zu ändern würde dem kunden die zornesröte ins gesicht treiben wenn er die rechnung für eine datenbankneukonstruktion bekommt ;)

      Das mit dem Like klappt eigentlich schon nur: Du musst % und nicht * angeben.

      uhiuhiuhi....da sagste was...wird sofort geändert (könnte es sein das heute montag ist? ;))

      Ausserdem sollte diese genügen:

      kunde = %'#session.user_id#'% kein or etc. das erzeugt nur doppelte Ergebnisse bei der suche.

      ne genügt nicht, da ich ja folgendes suche

      nur variable
      variable gefolgt von komma
      variable nach komma
      variable in kommata

      würde ich einfach nur nach
      "variable mit beliebig drumrum"
      suchen, würde ich, wenn ich die 1 suche
      alle datensantätze bekommen in denen eine 1 vorkommt,
      egal ob dort 1, 21, 11, 12345, 43431 oder 9871 enthalten ist

      so long
      ole
      (8-)>

      --
      Ein Gedicht: Alles bleibt wie immer... nur schlimmer.
      sh:( fo:) ch:| rl:° br:& n4:° ie:% mo:} va:| de:] zu:| fl:( ss:) ls: js:|
      1. Servus,

        es liegt vieleicht am montag aber:

        Wenn die Zahlen wie:

        1, 21, 11, 12345, 43431
        eindeutig sind, dann recht es doch einfach nur nach der Zahl zu suchen und nicht nach dem Komme dahinter oder davor auch.
        Auch wenn z.B. like zahl = %12345%

        Nach vorn und nach hinten ein Wilcart darstellt heisst es noch nicht, dass er damit nicht

        12345, 45454, 58692

        in der entsprechenden Tabelle den ersten Wert nicht finden würde.

        Kapiert? Sorry falls ich mich grad ungeschickt ausgrdrückt habe.

        Gruss Matze

        1. hi

          es liegt vieleicht am montag aber:

          ich glaube wir reden aneinander vorbei :)

          die komma separierte liste steht in einem datenfeld welches das format TEXT hat (also keine zahlen enthält).

          wenn ich also in einem textfeld nach einem buchstaben (was die zahlen in diesem fall wären) suche bekomme ich jede fundstelle des buchstaben angezeigt und nicht nur die an der er alleine steht (z.B. zwischen kommata oder am anfang oder ende der liste).

          eine suche in einem TEXT nach dem Buchstaben "1" (oder SQLmäßig %1%) würde bei folgenden zelleninhalten anschlagen:

          1
          2,5,7,13
          498,499,500,501
          661,834,908

          da in sämtlichen Datenfeldinhalten die "1" enthalten wäre.

          wohingegen, eine suche nach "1" (1), "1," (1,%), ",1," (%,1,%) oder "1" (1) eben nur anschlagen wurde

          wenn eins alleine steht (1) (alleine),
          wenn eins alleine steht gefolgt von einem komma (1,%) (anfang der liste),
          wenn eins alleine steht nach einem komma (%,1) (ende der liste),
          wenn eins alleine steht umschlossen von kommata (%,1,%) (mitten in der Liste),
          nicht aber wenn 1 innerhalb von 501 oder 11 etc. vorkommt.

          so long
          ole
          (8-)>

          --
          Ein Gedicht: Alles bleibt wie immer... nur schlimmer.
          sh:( fo:) ch:| rl:° br:& n4:° ie:% mo:} va:| de:] zu:| fl:( ss:) ls: js:|
          1. Servus,

            ja gut dabei hast Du recht.
            Gebe ich offen gestanden zu. Das Problem habe ich auch bedacht ging jedoch daon aus, dass jeder Wert eindeutig erkennbar it.

            Gruss matze

  2. Hi Ole,

    ID, EIGNER, KUNDE, NAME, BESCHREIBUNG, USER, ANGELEGT, MODERATOR, BEZEICHNUNG

    EIGNER und KUNDE haben eine 1:1 zuordnung, da steht nämlich nur eine zahl drin.

    Zuordnung wohin?

    USER hat eine 1:n zuordnung, dort stehen ein oder mehrere zahlen durch komma getrennt

    Zuordnung wohin?

    Ich glaube Du hast einige Dinge des Umganges mit Datenbanken noch nicht verstanden.
    Zellen, duie mehr als einen Inhalt haben, sind wenn möglich zu umgehen, indem auf eine andere Tabelle verweisst, welche die entsprechenden Inhalte hat. So etwas nennt man dann auch Beziehung untereinander (welcher Form auch immer)

    Ich verstehe, das Ganze so, dass ein Kunde immer mehrere User haben kann?
    Lege eine Zweite Tabelle an, welche den User und eine Referenz auf den Kunden enthält (das Feld kann dann auch gleich Primärschlüssel sein, falls dieser Datensatz eindeutig ist, was ich so verstanden habe)

    select * from auftrag where

    eigner = '#session.eigner#'
    AND
    (
    kunde = '#session.user_id#'
    OR user LIKE '#session.user_id#'
    OR user like '#session.user_id#,*'
    OR user like '*,#session.user_id#,*'
    OR user like '*,#session.user_id#'
    )

    warum steht das "OR user like '*,#session.user_id#'" gleich 4x im Statement?
    Wenn wir jetzt von deinem Datenbankmodell ausgehen, hast DU ein Fels mit mehreren Nummern drin (welche die User darstellen)
    Du musst innerhalb des Feldes selbst suchen ob die jeweilige Numemr drin vorkommt, aber wie gesagt, so etwas sollte man unterlassen.

    Am Besten Du beschäftigst Dich noch ein bisschen mit Datenbanken an sich und wenn es noch Fragen gibt, poste mal, was Du genau erreichen möchtest.

    ciao
    romy

    1. hi

      Zuordnung wohin?

      wert zuordnung. im einen feld steht nur eine zahl, im feld USER stehen in form einer komma getrennten liste n zahlen

      Ich glaube Du hast einige Dinge des Umganges mit Datenbanken noch nicht verstanden.

      ich denke ich hab mich einfach nur unverständlich ausgedrückt...

      Zellen, duie mehr als einen Inhalt haben, sind wenn möglich zu umgehen, indem auf eine andere Tabelle verweisst, welche die entsprechenden Inhalte hat. So etwas nennt man dann auch Beziehung untereinander (welcher Form auch immer)

      Ich verstehe, das Ganze so, dass ein Kunde immer mehrere User haben kann?
      Lege eine Zweite Tabelle an, welche den User und eine Referenz auf den Kunden enthält (das Feld kann dann auch gleich Primärschlüssel sein, falls dieser Datensatz eindeutig ist, was ich so verstanden habe)

      dazu hab ich schon was hier [pref:t=54345&m=301992] geschrieben :)

      Am Besten Du beschäftigst Dich noch ein bisschen mit Datenbanken an sich und wenn es noch Fragen gibt, poste mal, was Du genau erreichen möchtest.

      datenbanken sind normalerweise kein problem für mich....es ist nur leider montag, ich hatte ein sehr mieses (und vor allem warmes) wochenende und eigentlich hätte ich diese woche urlaub...welchen ich, wie man leicht erraten kann, gecancelt habe um in einem nicht klimatisieten büru meiner arbeit nachzugehen *seuftz*

      so long
      ole
      (8-)>

      --
      Ein Gedicht: Alles bleibt wie immer... nur schlimmer.
      sh:( fo:) ch:| rl:° br:& n4:° ie:% mo:} va:| de:] zu:| fl:( ss:) ls: js:|