Guma: MYSQL 5.0-> Datensätze auf maximal 20 begrenzen -> Beispiel

Hallo zusammen, ich kniffle gerade an folgendem Syntax:

// es soll auf maximal 20 Datensätze begrenzt werden, falls es mehr sind soll auf maximal 20 gelöscht werden.

DELETE FROM archiv WHERE nid=14 ORDER BY id DESC LIMIT (
SELECT COUNT( * )
FROM archiv
WHERE nid =1441
) -20

Ich bekomme einen Fehler:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(SELECT COUNT(*) FROM archiv WHERE nid=14) - 20' at line 1

Kann ich beide DB-Abfragen nicht zusammenlegen? MYSQL Version 5.0

Guma

  1. DELETE FROM archiv WHERE nid=14 ORDER BY id DESC LIMIT (
    SELECT COUNT( * )
    FROM archiv
    WHERE nid =1441
    ) -20

    Willst du von der ANzahl der Datensätze 20 abziehen?

    LIMIT 0,20

    dürfte das sein, was du willst.

    1. LIMIT 0,20 dürfte das sein, was du willst.

      Gähn, danke, LIMIT begrenzt die Ausgabe.
      Ich will falls mehr als 20 Einträge da sind auf maximal 20 Einträge löschen.
      Guma

      1. Ich prüfe deinen Ansatz nochmal, danke

        1. Nimmt SQL nicht an

          DELETE FROM 'archiv' WHERE nid = '1441' ORDER BY id DESC LIMIT 0,20

          MySQL meldet: Dokumentation
          #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''archiv' WHERE nid='1441' ORDER BY id DESC LIMIT 0,20' at line 1

          1. Hi,

            DELETE FROM 'archiv' WHERE nid = '1441' ORDER BY id DESC LIMIT 0,20

            MySQL meldet: Dokumentation
            #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''archiv' WHERE ...

            Und warum willst du aus einem String etwas löschen?

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Ich will datensätze löschen, keine strings.

              Grund: mehr als 20 dürfen es nicht werden, es ist ein Archiv mit den letzten 20 Änderungen.

              1. Ich möchte aus einer Tabelle nur die letzten 20 Einträge übrig lassen und alles andere löschen und das möglichst in einem query.

              2. Hi,

                Ich will datensätze löschen, keine strings.

                Und woraus willst du diese Datensätze löschen ...?

                Nicht aus einem String, also gib auch keinen solchen an.

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  2. Tach!

    DELETE FROM archiv WHERE nid=14 ORDER BY id DESC LIMIT (SELECT [...]) -20
    Kann ich beide DB-Abfragen nicht zusammenlegen? MYSQL Version 5.0

    Ja, kannst du nicht. Der LIMIT-Klausel kann man nur begrenzt etwas anderes als Integer-Konstanten übergeben.

    dedlfix.

    1. Danke verstanden.

  3. Hallo,

    » DELETE FROM archiv WHERE nid=14 ORDER BY id DESC LIMIT (  
    
    > SELECT COUNT( * )  
    > FROM archiv  
    > WHERE nid =1441  
    > ) -20
    
    

    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(SELECT COUNT(*) FROM archiv WHERE nid=14) - 20' at line 1

    Du hast offensichtlich das Handbuch nicht geprüft, sonst fragtest Du nicht:

    Kann ich beide DB-Abfragen nicht zusammenlegen? MYSQL Version 5.0

    Im Handbuch steht:

    "Currently, you cannot delete from a table and
         select from the same table in a subquery."

    Das gilt im Übrigen auch für MySQL Version 5.6.

    Das Handbuch beschreibt durchaus Strategien, die Du anwenden könntest.

    Freundliche Grüße

    Vinzenz

    1. danke vinzenz ich gehe dem jetzt nach