Ergebnis 1 bis 18 von 18

Thema: [MySQL] Bedingtes löschen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Zitat Zitat von drunken monkey
    Doch.


    Wohingegen deins komplett fehlerhaft ist. Erstens macht das "WHERE COUNT(*) > 99" was total anderes, als du willst, zweitens würde es ohne den Fehler wegen dem fehlenden "LIMIT 1" alle Einträge löschen, sobald mehr als 99 vorhanden sind.
    Also bitte, anstatt da irgendwelche "Verbesserungen" anbringen zu wollen, versuch doch einfach meine Lösung und werde glücklich. Oder sag zumindest nachher, was daran nicht geklappt hat.
    Ganz einfach. Dein Code hat nur nen Syntax Error gebracht. Der mag das SELECT COUNT(x) und so weiter an der Stelle nicht. Also sag bitte nicht einfach mal aus Prinzip doch, wenns nicht stimmt. Ich hab keine Lust, als Stammuser noch geflamet zu werden.

    @Jeez:
    Dein Code hat den gleichen Fehler wie die bisherigen auch. Gezählt werden sollen alle Einträge, gelöscht aber nur welche, die schon bewertet wurden.

  2. #2
    Zitat Zitat von DFYX
    Ganz einfach. Dein Code hat nur nen Syntax Error gebracht. Der mag das SELECT COUNT(x) und so weiter an der Stelle nicht. Also sag bitte nicht einfach mal aus Prinzip doch, wenns nicht stimmt. Ich hab keine Lust, als Stammuser noch geflamet zu werden.
    Sorry, hätte ich nicht gedacht. ó_Ò War nicht aus Prinzip "Doch" gesagt, sondern weil ich's getestet habe und keinen Fehler entdecken konnte. Allerdings auf PostgreSQL, hätte nicht gedacht, dass da so große Unterschiede sind. Aber wenn's echt nicht klappt, weiß ich nicht mehr weiter.

    Da ja anscheinend auch sonst niemand eine funktionierende Lösung anzubieten hat (was ich so gesehen habe o_O) musst du wohl wirklich 2 Queries verwenden. :-/

  3. #3
    Zitat Zitat von drunken monkey
    Sorry, hätte ich nicht gedacht. ó_Ò War nicht aus Prinzip "Doch" gesagt, sondern weil ich's getestet habe und keinen Fehler entdecken konnte. Allerdings auf PostgreSQL, hätte nicht gedacht, dass da so große Unterschiede sind. Aber wenn's echt nicht klappt, weiß ich nicht mehr weiter.

    Da ja anscheinend auch sonst niemand eine funktionierende Lösung anzubieten hat (was ich so gesehen habe o_O) musst du wohl wirklich 2 Queries verwenden. :-/
    Zwischen den einzelnen SQL-Dialekten gibt es starke Unterschiede. AFAIK hält sich niemand so wirklich an den aktuellen SQL-Standard.

    BTW, ich habe rein theoretisch etwas. Das Konzept ist folgendes:
    Code:
    select * from DFYX where id in
      (select id from DFYX where num_votes > 0 order by mean_vote asc)
    limit count(*) - $limit
    ...wobei $limit die Anzahl der zu behaltenden Zeilen ist, in diesem Fall 100.
    Dummerweise kann man bei limit unter keinen Umständen nichtskalare Werte verwenden, also braucht man zwei Queries:
    Code:
    $cl = mysql_result(mysql_query('select count(*) from DFYX'), 0, 0) - $limit;
    
    select * from DFYX where id in
      (select id from DFYX where num_votes > 0 order by mean_vote asc)
    limit $cl
    Dummerweise läßt MySQL (und vermutlich SQL allgemein) nicht zu, daß man aus einer Tabelle löscht, während man gleichzeitig mit einem Subquery liest. Also bin ich mittlerweile schon bei drei Queries angekommen...

    MySQL kann IN übrigens doch; der Subquery darf nur kein LIMIT beinhalten. Die aktuelle Version meines Ansatzes ist im Wesentlichen die letzte, nur daß das LIMIT jetzt am Ende steht und der Wert invertiert ist.


    BTW, @DFYX' Kommentar zu meinem letzten Post: Du hast das "where num_votes > 0" schon bemerkt, oder?

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •