thomas fisler: bedingt datensätze vergleichen und bedingt ausgeben

hallo zusammen

vorneweg: ich hab mir die nacht um die ohren geschlagen, stehe aber, mit meinem bescheidenen wissen, am berg.
folgendes problem oder anliegen habe ich:

ich habe eine datenbank mit der tabelle *daten* und den *feldern* "id", "name", "vorname", "user", "passwort", "nr1", "nr2", "nr3", "nr4" ... .

wenn sich nun ein user mit "user" und "passwort" einloggt, soll folgendes verglichen werden:

  • alle "nr-felder" des users, welche den wert 0 haben mit sämtlichen gleichen nr-felder der anderen user, welche den wert => 2 haben.
  • die ausgabe soll dann noch pro anderen user separat ausgegeben werden, wobei als ausgabe ein "ja" ausreicht.

beispiel:

user A hat in allen nr-feldern 0.
user B hat in allen nr-feldern 2 oder mehr.
user C hat in nr1 '1', in nr2 '3', in nr3 '0', in nr4 '3' in nr5 '2'.

die ausgabe müsste nun sein:

user B: nr1 ja, nr2 ja, nr3 ja, nr4 ja, nr5 ja
user C: nr2 ja, nr4 ja, nr5 ja

ich hoffe, ich hab mich einigermassen verständlich ausgedrückt und ihr könnt mir weiterhelfen. nicht dass ich ein fertiges script erwarte, hilfreiche tipps sind ebenso willkommen, das fördert mein learning by doing.

sollte ich gewisse regeln verletzt haben, bitte ich um nachsicht.

gruss
thomas

  1. moin,

    ich habe eine datenbank mit der tabelle *daten* und den *feldern* "id", "name", "vorname", "user", "passwort", "nr1", "nr2", "nr3", "nr4" ... .

    daten ist ein schlechter name für eine tabelle, er sagt nichst aus über die inhalte der tabelle. besser wäre zum beispiel kunden oder was auch immer in der tabelle stehen soll.

    die nr felder könnten darauf schließen, dass du ein design problem hast. das läßt sich mit gewissheit aber nicht sagen, da wir nichts deine fachliche umgebung kennen. aber aus den bauch heraus würde ich sagen, soltest du die nr spalten in eine andere tabelle auslagern. aber auch hier wurden wieder die spaltennamen sehr schlecht gewählt wurden und somit erschließt uns nicht der sinn. namen sollten zwei eigenschaften erfüllen, so kurz wie möglich und so sprechend wie nötig. sprechend heißt, ich lese den namen einer tabelle /object oder der spalten und der name gibt mir informationen darüber, worum es sich dabei handelt.

    die ausgabe müsste nun sein:

    user B: nr1 ja, nr2 ja, nr3 ja, nr4 ja, nr5 ja
    user C: nr2 ja, nr4 ja, nr5 ja

    im normalfall geben abfragen ein resultset zurück, wo die anzahl der spalten für alle datensätze gleich ist. das ergebnis entspricht "quasi" wieder einer tabelle. du kannst demnach nicht in einem datensatz 5 spalten haben und in dem anderen 3. was du machen kannst ist entweder alles zu einer spalten zusammenzuführen oder aber die anderen "fehlenden" spaltenwerte mit NULL werten auffüllen. das hängt aber auch immer ein stück weit davon ab, wie sie weiterverarbeitet werden, ob sie nur angezeigt oder ob auf die jeweiligen einzelnen spalteninhalte auch danach noch in irgendeiner form zugefriffen werden soll.

    am besten kann man dir helfen, wenn du uns ein wenig mehr feedback gibst, was du überhaupt machen willst. oftmals ergibt sich dann ein ganz anderer ansatz.

    Ilja

    1. hallo ilja

      danke für deinen input. ich versuche mich zu erklären:

      es handelt sich um eine art tauschbörse von bildern.
      jeder user muss sich registrieren und erfasst oder mutiert seinen bilderbestand. dies ist soweit klar und programmiert.

      nun ist das ziel, durch tauschen zum kompletten bildersatz zu kommen (die nr-felder stellen die bilder dar).

      um dem jeweiligen user zu helfen, möchte ich seinen bildersatz mit dem der anderen teilnehmer vergleichen und ihm schlussendlich vorschläge unterbreiten, welcher andere user ihm welche seiner fehlenden bilder liefern könnte - und umgekehrt.

      vergleichbar ist das ganze wohl mit tauschbörsen von panini oder dergleichen.

      besten dank derweil
      gruss
      thomas

      1. moin,

        um dem jeweiligen user zu helfen, möchte ich seinen bildersatz mit dem der anderen teilnehmer vergleichen und ihm schlussendlich vorschläge unterbreiten, welcher andere user ihm welche seiner fehlenden bilder liefern könnte - und umgekehrt.

        was mich immer mehr zu der überzeugung führt, dass ihr ein design problem habt. die tabelle (ich nenne sie mal lieber user anstelle von daten) und die bilder, die der jeweilige user besitzt, prägen sich in zwei tabellen aus, bzw. ich würde es sogar als zwei verschiedene entitäten ansehen zwischen bildern und user, bei denen es eine n:m beziehung gibt und dann wären es drei tabellen. wie man das nun macht, ob mit zwei entitäten (drei tabellen) oder einer entität(2 tabellen), das hängt davon ab, wenn zwei user das gleiche bild in ihrer sammlung haben, ob es sich dabei um das "gleiche" oder das "selbe" bild handelt. die begriffe mögen ähnlich klingen, sind aber für die modellierung zwei verschiedene dinge. meinen entwickelern habe ich früher immer gesagt: "was gleich aussieht muss nicht gleich sein." aber das zu erklären wäre jetzt zuviel der wortspielerei.

        fazit: mach dir noch mal gedanken über dein daten-design, danach lösen sich ofmtals probleme bezüglich der abfragen, wie man welche information bekommt.

        Ilja

        1. hallo ilja

          du überforderst mich total *lach
          aber ich gebe mir mühe, mich einzulesen.
          danke dir jedenfalls für deine ausführungen!

          die bilder sind die gleichen, nicht die selben.

          gruss
          thomas

          1. moin,

            die bilder sind die gleichen, nicht die selben.

            dann würde ich sagen, solltest du die bilder der user in eine eigene tabelle auslagern, anstelle lauter spalten dafür anzulegen. und nicht vergessen, sprechen namen für die tabellen und spalten zu vergeben....

            Ilja