MaTTes: Datensatz Löschen

Hallo Leute,

ich würde gerne aus meiner MySQL-Datenbank einen Datensatz löschen, angezeigt wird dieser im Feld TIME so "20080131153643".

Was kann ich anstelle der letzten beiden Zahlen einsetzen, dass ich die Sekunden nicht angeben muss. Löschen soll er mir alle selben Namen die um 15:36 im Datensatz eingefügt wurden.

Meine Delete Zeile sieht momentan so aus:

DELETE FROM tbl\_xxx WHERE name = xxx WHERE zeit = xyz

PHPMyAdmin Version 2.8.0

bitte um Hilfe

  1. Hallo,

    die Darstellung deines Problems ist recht verworren.

    Du hast also ein Zeitfeld mit den Sekunden. Eine Zahl wird in SQL schon mal nicht in Tüdelchen gesetzt und was soll zweimal WHERE?

    Wenn dich bei einer Zahl die letzten beiden Stellen nicht interessieren, geht es so:

    WHERE zeit >= 20080131153600 AND zeit < 20080131153700

    LG. Kalle

    1. Danke Kalle, für die schnelle Antwort, der Tipp mit der Zeit von dir ist schon nicht schlecht.
      Das erste WHERE ist dafür gedacht um in der Zeit (von bis) alle Namen die XXX heissen zu löschen, deshalb 2x WHERE.

      Wie kann ich es denn sonst bewerkstelligen, dass ich zwei abfragen in der Zeile habe?

      MaTTes

      1. Mahlzeit,

        Das erste WHERE ist dafür gedacht um in der Zeit (von bis) alle Namen die XXX heissen zu löschen, deshalb 2x WHERE.

        SQL erlaubt nur ein WHERE.

        Wie kann ich es denn sonst bewerkstelligen, dass ich zwei abfragen in der Zeile habe?

        Die Bedingungen per AND verknüpfen, wenn beide gelten sollen bzw. per OR, wenn auch eine ausreicht?

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. ja ne, er muss schon beide erkennen, damit er auch richtig löscht, aber wie würde das dann aussehen?

          1. Mahlzeit,

            ja ne, er muss schon beide erkennen, damit er auch richtig löscht, aber wie würde das dann aussehen?

            "Richtig löschen"? Ich wusste gar nicht, dass man auch falsch löschen kann ... ich würde Dir das hier empfehlen.

            MfG,
            EKKi

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            1. naja, so wirklich weiter kommen tu ich nicht.

              was wäre denn wenn der namen eine zahl wäre, kommen dann auch die ` dahin oder bleiben die weg?

              1. was wäre denn wenn der namen eine zahl wäre, kommen dann auch die ` dahin oder bleiben die weg?

                Literale/Strings/Zeichenketten (wie auch immer man es nennen mag, grob gesagt "Wörter") immer in einfachen Anführungszeichen, numerische Werte ohne.

              2. echo $begrüßung;

                was wäre denn wenn der namen eine zahl wäre, kommen dann auch die ` dahin oder bleiben die weg?

                MySQL unterscheidet bei den Begrenzungszeichen zwischen ', " und (einfache und doppelte Anführungszeichen und Backticks). ' und " sind zum Begrenzen von Werten gedacht, die kennzeichnen Identifier, also Spalten-, Tabellen- und Datenbanknamen.

                Bei MySQL kann man grundsätzlich sowohl Strings als auch Zahlen in ' bzw. " einrahmen. Dies hat, wenn man die Werte auch noch mit mysql_real_escape_string() (gibt es u.a. auch als PHP-Funktion) behandelt, den Vorteil, dass man die Werte so gegen SQL-Injection gesichert hat, und nicht zwingend sicherstellen muss, dass es sich bei dem Zahlenwert auch wirklich um einen solchen handelt. Man stolpert dann auch nicht in solche Fallen, wie sie hexadezimale Werte darstellen, die in MySQL (und bei ODBC) als String angesehen werden, in den meisten anderen Sprachen hingegen als Zahl durchgehen.

                echo "$verabschiedung $name";

        2. WHERE time >= 20080131153600 AND time < 20080131153700 AND name = Franz

          so hab ich es jetzt

          1. Mahlzeit,

            WHERE time >= 20080131153600 AND time < 20080131153700 AND name = Franz

            Wenn Du dann "Franz" noch in ' setzt (da "name" anscheinend ein VARCHAR-Feld ist), dann sollte das auch klappen.

            Wie gesagt: ich kann Dir nur dringendst empfehlen, Dich in die Grundlagen von SQL einzulesen.

            MfG,
            EKKi

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    2. Moin!

      die Darstellung deines Problems ist recht verworren.

      Finde ich nicht.

      Du hast also ein Zeitfeld mit den Sekunden.

      Das sogenannte Format "TIMESTAMP" in älteren MySQL-Versionen.

      Eine Zahl wird in SQL schon mal nicht in Tüdelchen gesetzt

      Doch, bei MySQL sollte man das durchaus tun, weil man ja Escaping mit dynamischen Daten machen muß.

      und was soll zweimal WHERE?

      Das ist wohl eindeutig ein Fehler.

      Wenn dich bei einer Zahl die letzten beiden Stellen nicht interessieren, geht es so:

      WHERE zeit >= 20080131153600 AND zeit < 20080131153700

      Einfacher, weil sprachlich verständlicher, wäre es so:

      WHERE zeit BETWEEN '20080131153600' AND '20080131153659'

      Außerdem gibts es in MySQL eine ganze Reihe von Datums- und Zeitfunktionen, die unter anderem in der Lage sind, die Sekunden einfach abzuschneiden.

      - Sven Rautenberg

      --
      "Love your nation - respect the others."