Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehler im SELECT?

Einklappen

Neue Werbung 2019

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

  • Fehler im SELECT?

    Ich habe ein paar Datensätze in einer Tabelle, die folgendeWerte beinhalten:

    Beispiele
    ID Pos PosinKls Teilnehmer_ID
    402 1 1 NULL
    403 2 2 NULL
    404 3 1 NULL
    405 4 3 NULL
    406 5 4 NULL
    407 6 5 NULL
    408 7 6 NULL


    doch das
    SELECT * FROM `cupwertung` WHERE `Teilnehmer_ID`= NULL

    liefert ein leeres Ergebnis.
    Hat jemenad einen Tipp?

  • #2
    Richtig wäre:
    Code:
    SELECT *
    FROM `cupwertung`
    WHERE `Teilnehmer_ID` IS NULL
    Vorausgesetzt die Werte in der Datenbank sind "echte NULLen" und keine strings.

    Kommentar


    • #3
      PHP-Code:
      SELECT
          
      `ID`, `Pos`, `PosinKls`, `Teilnehmer_ID`
      FROM
          
      `cupwertung`
      WHERE
          
      `Teilnehmer_IDIS NULL 
      Bitte immer alle Felder aufführen, die du ausgegeben haben willst. Das macht es auch für uns besser nachvollziehbar.

      Kommentar


      • #4
        Danke, dieses Problem ist gelöst , doch es ergibt sich eine neue Frage, die der Verarbeitung.
        Ich möchte gerne das die Datensätze mit einer anderen Tabelle abgeglichen werden und per Update aktualisiert werden:
        So in etwa so:
        Code:
        UPDATE `cupwertung`
        JOIN `user` ON CONCAT(user.Vorname,' ', user.Name) LIKE cupwertung.Name
        SET `Teilnehmer_ID` = (SELECT DISTINCT `id`
                                   FROM `user`
                               WHERE cupwertung.Name LIKE CONCAT(user.Vorname,' ', user.Name))
        
                               WHERE `Teilnehmer_ID`IS NULL AND cupwertung.Name LIKE CONCAT(user.Vorname,' ', user.Name)
        Leider ergibt mein Ansatz:
        #1242 - Subquery returns more than 1 row
        Hierbei ergibt sich aber meine Frage wie behandle ich die Datensätze die keinen Eintrage in `user`ergeben?
        Ich würde diese gerne als INSERT lösen, doch `user` hat `Name` und `Vorname` und die gelieferten Daten haben nur `Name`?

        Kommentar


        • #5
          Das Konzept scheint mir seltsam, erklär uns doch mal was du mit den beiden Tabellen vor hast und wie die aussehen.

          Kommentar


          • #6
            Zitat von ChromOxid Beitrag anzeigen
            Das Konzept scheint mir seltsam, erklär uns doch mal was du mit den beiden Tabellen vor hast und wie die aussehen.
            Ich bekomme von Veranstaltern Ergebnisdateien in verschiedenen Formaten und habe in `user` einige Teilnehmer. Aber nur die, die sich über meine Seite zu den verschiedenen Veranstaltungen melden. Aus den Ergebnissen wird dann eine Wertung/Rangliste. gemacht. Leider melden sich ca. 30% Vorort, davon sind wieder 50% neue Teilnehmer die oft auch nur an ein oder zwei Veranstaltungen teilnehmen. Trotzdem gehören sie in die Wertung.
            Da User/Teilnehmer oft Schwierigkeiten haben ihren Namen oder ihr Geburtsdatum anzugeben oder jeweils korrekt abzugeben habe ich es meist über den Namen und die Klasse zusammen gefasst. Da ist aber die Fehlerquote sehr hoch. Nun möchte ich ersteinmal die Tabellen abgleichen mit den vorhandenen in User und die die nicht in User sind, eintragen und Ihnen so eine ID geben. Das macht den Abgleich leichter. Hintergrund ist, das von den 20 Veranstaltungen nur die besten 9 in die Wertung kommen und der Abgleich über den Namen schwierig ist. Den Eintrag Vorort in die DB vorzunehmen ist organisatorisch schwer, und oft gibt es auch keinen Onlinezugang. Ausserdem ist das Personal Vorort in den Vereinen oft nicht PC-erfahren (AK 65+ bis 75+)

            Kommentar


            • #7
              cupwertung
              ID
              Pos
              PosinKls
              StNr
              Teilnehmer_ID
              Name
              Verein
              Klasse
              Gesamtzeit
              Geschwindigkeit
              Runden
              Punkte
              UCI_Code
              Rennen
              AK_Punkte
              Cup

              Kommentar


              • #8
                user
                ID
                Autologin
                IP
                SessionID
                Nickname
                Passwort
                Email
                Show_Email
                Homepage
                Registrierungsdatum
                Strasse
                Haus_Nr
                Land
                Wohnort
                Geschlecht
                Name
                Vorname
                Jahrgang
                UCIcode
                Lizenz_Nr
                Team_id
                Newsletter
                team_leitung
                Letzter_Login
                Letzte_Aktion
                Transponder

                Kommentar


                • #9
                  Nun möchte ich ersteinmal die Tabellen abgleichen mit den vorhandenen in User und die die nicht in User sind, eintragen und Ihnen so eine ID geben. Das macht den Abgleich leichter. Hintergrund ist, das von den 20 Veranstaltungen nur die besten 9 in die Wertung kommen und der Abgleich über den Namen schwierig ist.
                  Das wäre auch meine vorgehensweise, erstmal alle "user" einzutragen. Allerdings deckt sich das nicht mit deiner Query oben.
                  Ich würde hier einfache 'Insert Into's erwarten, mit entweder vorheriger php seitiger Prüfung ob der Eintrag schon existiert oder entsprechend gesetzten Unique Abhängigkeiten in der Datenbank.

                  über den Namen und die Klasse zusammen gefasst.
                  Was für eine Klasse? Das "reparieren" von beschädigten / falschen Daten ist ein äußerst komplexes Thema.
                  Vermutlich wird es dir nur möglich sein die Datensätze mit richtig angegebenen Daten miteinander in Verbindung zu setzen.

                  Anbei, du hast zwar erklärt was du bekommst, aber leider nicht wo du damit hin willst. Möchtest du Daten über die einzelnen user sammeln und dann "gebündelt" ausgeben ala, ich logge mich ein und sehe alle meine Wertungen der Turnierteilnahmen?

                  Ein Update "innerhalb" der Datenbank ist ein Zeichen für ungeeignetes Datenbankdesign. Wenn du etwas Updaten möchtest sollte irgendeinen "äußerer Anstoß" dazu führen.
                  Ein weiteres Indiz ist der Spaltenname "Teilnehmer_id". Da an einem Turnier mehrere User teilnehmen und jeder User an mehreren Turnieren teilgenommen hat handelt es sich vermutlich um eine n:m Beziehung die du mit einer "Zwischentabelle" darstellen musst.
                  Stichwort dazu ist Normalisierung.

                  Zeig uns doch bitte mal dein Datenbankschema, d.h. den Aufbau der beiden Tabellen, dann lässt sich dir vermutlich einfacher helfen und du brauchst keine solchen "Verrenkungen" wie in #4

                  Kommentar


                  • #10
                    Und du willst in die Spalte "Teilnehmer_id" deine Id aus der Tabelle "user" eintragen? Daraus ergibt sich kein wirklicher Mehrwert, da kannst du die beiden Tabellen auch einfach über den zusammengesetzten Namen joinen. Ist vermutlich "etwas" weniger performant strings zu joinen (im Vergleich zu Integers bzw. id's) aber bei den angedeuteten Datenmengen denke ich alles andere als ein Problem.

                    Ansonsten würde hier die cupwertungen per Schleife durchlaufen, prüfen ob der user vorhanden ist, ggf. eintragen und dann die entsprechende Wertung eintragen. Wie das genau aussieht ist dann natürlich stark vond er verwendeten Sprache abhängig.

                    Kommentar


                    • #11
                      Zitat von ChromOxid Beitrag anzeigen
                      Und du willst in die Spalte "Teilnehmer_id" deine Id aus der Tabelle "user" eintragen? Daraus ergibt sich kein wirklicher Mehrwert, da kannst du die beiden Tabellen auch einfach über den zusammengesetzten Namen joinen. Ist vermutlich "etwas" weniger performant strings zu joinen (im Vergleich zu Integers bzw. id's) aber bei den angedeuteten Datenmengen denke ich alles andere als ein Problem.

                      Ansonsten würde hier die cupwertungen per Schleife durchlaufen, prüfen ob der user vorhanden ist, ggf. eintragen und dann die entsprechende Wertung eintragen. Wie das genau aussieht ist dann natürlich stark vond er verwendeten Sprache abhängig.
                      Das eigentliche Problem ist das ich meist Ergebnisse mit Teilnehmern ohne ID bekomme. Daher die Abfrage mit Update. Ich habe das jetzt per php gelöst und das gleich so das auch der Verein gelöst wird.

                      Kommentar

                      Lädt...
                      X