Löschen von Daten aber nicht alle

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Löschen von Daten aber nicht alle

    Hallo Leute,

    ich möchte gerne aus eine Tabelle eine Ergebnismenge Löschen bis auf die zwei ersten Einträge.

    Quellcode

    1. DELETE FROM `session` WHERE `be_id` =0 AND `se_status` = 'd' ORDER BY `session`.`se_session` ASC LIMIT 2 ;



    so löscht er nur die ersten zwei Einträge deswegen hatte ich an sowas gedacht wie

    Quellcode

    1. DELETE FROM `session` WHERE `be_id` =0 AND `se_status` = 'd' ORDER BY `session`.`se_session` ASC LIMIT ((SELECT count(*) FROM `session` WHERE `be_id` =0 AND `se_status` = 'd' )-2);


    Leider klappt das so nicht :( Hättet ihr eine Idee wie man das sonst umsetzten könnte, oder wie man das richtig schreiben muss damit es funtkioniert?

    Gruß
    Stephan
  • Hey,

    also der Primärschlüssel heißt se_id, aber dannach wird nicht ausgewertet, sondern be_id (Benutzer ID). Hintergrund es soll möglich sein eine Session die Abgelaufen oder abgebrochen wurde wieder einen Benutzer Frei zuschalten.

    Zum testen habe ich mal einen SELECT daraus gemacht :

    Quellcode

    1. SELECT * FROM session WHERE be_id IN (SELECT be_id FROM session ORDER BY be_id ASC LIMIT 2)


    dann bekomme ich : #1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

    Gruß
    Stephan
  • Hmmm welche Version unterstützt das den? Ich habe 5.0 im einsatzt :)

    Da ich momentan das nicht genau verstehe habe ich das mal so versucht, auch erstmal mit Select:

    Quellcode

    1. CREATE TABLE `session` (
    2. `se_id` int(10) unsigned NOT NULL auto_increment,
    3. `be_id` int(10) unsigned NOT NULL,
    4. `se_sessiondaten` text collate utf8_bin,
    5. `se_ticketzeit` int(12) unsigned default NULL,
    6. `se_session` char(32) collate utf8_bin default NULL,
    7. `se_status` enum('a','d') collate utf8_bin default 'a',
    8. PRIMARY KEY (`se_id`,`be_id`),
    9. UNIQUE KEY `session_index` (`se_session`)
    10. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=14 ;
    11. SELECT * FROM session USING (SELECT be_id FROM session ORDER BY se_ticketzeit ASC) be_id NATURAL JOIN session LIMIT 2;
    Alles anzeigen


    Leider geht das nicht :(

    Gruß
    Stephan