php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 21.10.2004, 10:12  
Gast
 
Beiträge: n/a
Standard [Erledigt] Löschproblematik

bei MySQL 4.0.20a.

Moin,

ein User soll max. 5 Nachrichten in der Tabelle gespeichert haben, unabhängig davon, wie alt diese sind. Alle übrigen können gelöscht werden.
Momentan mache ich das folgendermaßen:
1. setze Löschflag aller Nachrichten des Users, vor der Ausgabe der Top 5, auf 1 (= soll gelöscht werden)
2. Ausgabe der Top 5 Nachrichten per while(). Dabei wird das Löschkennzeichen jeder ausgegebene Nachricht wieder auf 0 gesetzt
3. Wenn Top 5 ausgegeben, werden alle Nachrichten des Users mit Löschkennzeichen = 1 gelöscht.

Frage mich, ob es einfacher geht. Ich hab's noch nicht ausprobiert, aber funktioniert z. B. folgendes?
DELETE FROM Tabelle WHERE id_user = 1 ORDER BY insertdate DESC LIMIT 5
Es heißt ja LIMIT start, wieviel. Könnte ich mit obigem String alle DS ab Position 5 (incl.) löschen, oder ist LIMIT beim DELETE nicht anwendbar?

Danke!

Greetz
72dpi
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 21.10.2004, 10:26  
Erfahrener Benutzer
 
Registriert seit: 19.10.2004
Beiträge: 498
marsch
Standard Re: Löschproblematik

Zitat:
Zitat von 72dpi
bei MySQL 4.0.20a.

Moin,

ein User soll max. 5 Nachrichten in der Tabelle gespeichert haben, unabhängig davon, wie alt diese sind. Alle übrigen können gelöscht werden.
Momentan mache ich das folgendermaßen:
1. setze Löschflag aller Nachrichten des Users, vor der Ausgabe der Top 5, auf 1 (= soll gelöscht werden)
2. Ausgabe der Top 5 Nachrichten per while(). Dabei wird das Löschkennzeichen jeder ausgegebene Nachricht wieder auf 0 gesetzt
3. Wenn Top 5 ausgegeben, werden alle Nachrichten des Users mit Löschkennzeichen = 1 gelöscht.

Frage mich, ob es einfacher geht. Ich hab's noch nicht ausprobiert, aber funktioniert z. B. folgendes?
DELETE FROM Tabelle WHERE id_user = 1 ORDER BY insertdate DESC LIMIT 5
Es heißt ja LIMIT start, wieviel. Könnte ich mit obigem String alle DS ab Position 5 (incl.) löschen, oder ist LIMIT beim DELETE nicht anwendbar?

Danke!

Greetz
72dpi
Hallo,

LIMIT ist natürlich möglich, aber kein ORDER BY im DELETE-Statement, s.

http://dev.mysql.com/doc/mysql/en/DELETE.html

--

Marco
marsch ist offline   Mit Zitat antworten
Alt 21.10.2004, 10:31  
Gast
 
Beiträge: n/a
Standard Re: Löschproblematik

Zitat:
Zitat von marsch
LIMIT ist natürlich möglich, aber kein ORDER BY im DELETE-Statement, s.

http://dev.mysql.com/doc/mysql/en/DELETE.html
So? Genau dort liest man:
Code:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
       [WHERE where_definition]
       [ORDER BY ...]    <-----
       [LIMIT row_count]
  Mit Zitat antworten
Alt 21.10.2004, 10:33  
Gast
 
Beiträge: n/a
Standard

Danke Euch!
Also sollte ich es einfach mal ausprobieren!?

Greetz
72dpi
  Mit Zitat antworten
Alt 21.10.2004, 10:42  
Gast
 
Beiträge: n/a
Standard

Hmm, scheint so nicht ganz zu funktionieren, wie ich mir das erhofft habe.

<Aus mysql-Doku>
DELETE FROM logdatei
WHERE user = 'jcole'
ORDER BY zeitstempel
LIMIT 1

Das löscht den ältesten Eintrag (von zeitstempel), wo die Zeile mit der WHERE-Klausel übereinstimmt.
</Aus mysql-Doku>

Mein Beispiel
DELETE FROM Tabelle WHERE id_user = 1 ORDER BY insertdate DESC LIMIT 5
löscht also die 5 ältesten Einträge und nicht alle DS, die nach den ersten 5 kommen.
Naja, dann bleibts so wie ichs gerade mache.

Danke und Gruß
72dpi
  Mit Zitat antworten
Alt 21.10.2004, 11:20  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von 72dpi
Hmm, scheint so nicht ganz zu funktionieren, wie ich mir das erhofft habe.
17.7. Wie lösche ich alle Datensätze, die älter als n Tage sind?
http://php-faq.info/index.php?aktion...id=205&lang=de
  Mit Zitat antworten
Alt 21.10.2004, 11:49  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von meikel
Wie lösche ich alle Datensätze, die älter als n Tage sind?
Nee, ich muss ja nicht DS löschen, die älter als n Tage sind, sondern es sollen für einen User nur max. 5 DS in der Tabelle stehen. Ab dem 6. (egal von wann der ist), soll alles von diesem User gelöscht werden.

Deshalb dachte ich an LIMIT, weil ich da ja beim SELECT einen StartDS angeben kann. Nur beim DELET funzt das eben wohl etwas anders.

Angenommen der User hat genau 5 DS eingetragen.
DELETE FROM Tabelle WHERE id_user = 1 ORDER BY insertdate DESC LIMIT 5 hätte dann für meinen Fall 0 DS löschen müssen, weil der User ja nicht mehr als seine max. 5 Beiträge hat. Er löscht aber eben alle 5.

Gruß
72dpi
  Mit Zitat antworten
Alt 21.10.2004, 11:56  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von 72dpi
Zitat:
Zitat von meikel
Wie lösche ich alle Datensätze, die älter als n Tage sind?
Nee, ich muss ja nicht DS löschen, die älter als n Tage sind,
Das war nur als Beispiel gedacht.

Zitat:
sondern es sollen für einen User nur max. 5 DS in der Tabelle stehen. Ab dem 6. (egal von wann der ist), soll alles von diesem User gelöscht werden.
Na jut, wenn es egal ist, welche gelöscht werden sollen
Code:
delete from tabelle where user='fritz' limit 6,1000
Falls das nicht geht (vielleicht meckert mysql die 1000 an):
Code:
select count(*) as anzahl where user='fritz'
und
Code:
delete from tabelle where user='fritz' limit 6, ($anzahl-6)
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
löschkennzeichen sql, löschflag, löschflag mysql, sql löschkennzeichen selektieren, mysql was sind löschkennzeichen, löschkennzeichen mysql, mysql delete limit

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:17 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.