Delete maar laat 1 row staan..

  • Beste,


    Bij planemania.nl kan je monteurs inhuren.
    Als gratis spelende 1 en als Premium 5.
    Maar: Als je premium verloopt, moeten die 5 monteurs weg, en moet er 1 blijven staan (die je krijgt als free).


    Ik haal de monteurs zo op:

    PHP
    mysql_query("SELECT id FROM personeel WHERE eigenaar='".$data['name']."' AND soort='3'");


    Nu de vraag:
    Hoe kan ik alle 5 verwijderen, maar er wel 1 laten staan?


    Kan dit met LIMIT 1,4, worden dan de laatste 4 records verwijderd?
    Dus dat ik in de delete doe:

    PHP
    mysql_query("DELETE FROM personeel WHERE eigenaar='".$data['name']."' AND soort='3' LIMIT 1,4");


    Maar dan volgend probleem:
    Als je er nu 2 hebt, dan moet er alleen LIMIT 1 worden verwijderd...


    Dus hoe doe ik dit het makkelijkst?


    Bedankt alvast,


    Lars Groot

  • Guest, wil je besparen op je domeinnamen? (ad)
  • PHP
    DELETE FROM personeel WHERE eigenaar='EIGENAAR' AND soort='3' LIMIT ((SELECT COUNT(1) FROM personeel WHERE eigenaar = 'EIGENAAR')-1)


    Verwacht dat dit wel moet kunnen: Een subquery in de LIMIT bij een DELETE statement. Laat de query wel even op wat testdata los. Is sowieso verstandig bij iedere query die iets ingewikkelder is.

  • Ik heb nu dit in een cron staan:

    PHP
    mysql_query("DELETE FROM personeel2 WHERE eigenaar='".$sel1['name']."' AND soort='3' LIMIT ((SELECT COUNT(id) AS id2 FROM personeel2 WHERE eigenaar = '".$sel1['name']."' AND soort='3')-1)") or die(mysql_error());


    Maar ik krijg deze error:

    Citaat

    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(id) AS id2 FROM personeel2 WHERE eigenaar = 'admin' AND soort='3'' at line 1


    Ik heb al wat geprobeerd, maar ik behoud deze error...
    Zou iemand het even willen oplossen :)


    Lars

  • Robin,
    Hoe dan?


    On:
    Het is nu opgelost.
    Dit is de huidige code:

    PHP
    $res1 = mysql_query("SELECT name FROM users WHERE vipdays = '0'");
    while($sel1 = mysql_fetch_array($res1)){
    $result2 = mysql_query("SELECT id FROM personeel WHERE eigenaar = '".$sel1['name']."' AND soort='3'");
    $result = mysql_num_rows($result2)-1;
    mysql_query("DELETE FROM personeel WHERE eigenaar='".$sel1['name']."' AND soort='3' LIMIT ".$result."") or die(mysql_error());
    }


    En het werkt perfect ;)
    Via count(); werkte het niet, dus maar met mysql_num_rows(); gedaan.


    Bedankt Killingdevil en de rest ;)


    Lars

    Nieuwe reactie samengevoegd met originele reactie op 03.07.10 20:18:53:
    Update:
    Ik krijg deze error:


    Citaat

    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 '-1' at line 1


    Terwijl er helemaal geen -1 in staat...
    Weet iemand hoe ik die oplos?

  • $result = mysql_num_rows($result2)-1;


    dit is de enige -1 in je script is het script nog groter? zoja laat dat ook even zien;)

    This is ten percent luck, twenty percent skill
    Fifteen percent concentrated power of will
    Five percent pleasure, fifty percent pain
    And a hundred percent reason to remember the name!

  • Omdat een personeel lid wel / niet aan het werk kan zijn.
    Dus er word in die tabel ook nog een datetime(); opgeslagen en de tijd dat het vliegtuig weg is etc.


    Snap je?


    Maar het is al opgelost.
    De correcte structuur is hier:

    PHP
    $res1 = mysql_query("SELECT name FROM users WHERE vipdays = '0'") or die(mysql_error());
    while($sel1 = mysql_fetch_array($res1)){
    $result2 = mysql_query("SELECT id AS id2 FROM personeel WHERE eigenaar='".$sel1['name']."' AND soort='3'") or die(mysql_error());
    if(mysql_num_rows($result2) > 1){
    $result3 = mysql_num_rows($result2);
    $result = $result3-1;
    mysql_query("DELETE FROM personeel WHERE eigenaar='".$sel1['name']."' AND soort='3' LIMIT '".$result."'") or die(mysql_error());
    }
    }


    Hij kwam volgens mij bij de Limit onder de 0 (-1) dus hij telt nu eerst het aantal rows, en als die groter dan 1 is dan pas voert ie het uit ;)


    Bedankt iedereen,


    Lars

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!