Avatar billede learner Praktikant
28. marts 2006 - 00:58 Der er 12 kommentarer og
1 løsning

Hjælp med query

Hej, jeg bruger php og mysql og har brug for at lave følgende så enkelt som muligt:

slet alle i tabellen "blabla" hvor bruger='niels', og de 25 nyeste er fredet og må ikke slettes. Alle linier har en id som er auto encrement, så det er de mindste der skal slettes.

Hvordan gør en rigtig nørd det? :o)

På forhånd tak
Avatar billede learner Praktikant
28. marts 2006 - 00:59 #1
mysql_query("  ???? WHERE bruger='niels' ????  ") or...
Avatar billede learner Praktikant
28. marts 2006 - 01:06 #2
ov, jeg er nødt til trække indholdet i picture_name ud på de linier som slettes. For jeg skal slette tilhørende billede til linien som slettes. Er det muligt at bygge ind i samme query?

:o)
Avatar billede learner Praktikant
28. marts 2006 - 01:18 #3
Her er lidt og bygge på :o)

$Query = mysql_query("  picture_name  ??????????  WHERE bruger  25 = 'niels'  ??????  ") or die(mysql_error());
while($Array = mysql_fetch_array($Query)){
    Delete_pic_if_exist($Array['picture_name'])
}

Glæder mig meget :o)
Avatar billede fixxxer Nybegynder
28. marts 2006 - 01:31 #4
Jeg kan ikke se for mig at det kan gøres i een SQL-statement, men her er et bud i PHP:

/* find alle id */
$query = mysql_query("SELECT id FROM din_tabel");
while ($fetch = mysql_fetch_assoc($query)) {
    $alle_id[] = $fetch['id'];
}

/* find de 25 som skal fredes */
$query = mysql_query("SELECT id FROM din_tabel ORDER BY id DESC LIMIT 25");
while ($fetch = mysql_fetch_assoc($query)) {
    $fredet_id[] = $fetch['id'];
}

/* sammenlign alle_id og fredet_id
vi har nu de id der skal slettes (forhåbentligt) */
$slet_id = array_diff($alle_id, $fredet_id);


/* hvis der blev fundet nogen id der skal slettes */
if (count($slet_id) > 0) {

    /* slå $slet_id op i tabellen */
    $query = mysql_query("SELECT picture_name FROM din_tabel WHERE id IN(".implode(',', $slet_id));
    while ($fetch = mysql_fetch_assoc($query)) {
        Delete_pic_if_exist($fetch['picture_name']);
    }
}
Avatar billede fixxxer Nybegynder
28. marts 2006 - 01:33 #5
Du kan jo evt. nøjes, som test, med at echo'e picture_name i sidste løkke for at undgå at slette billeder ved en fejl.
Avatar billede learner Praktikant
28. marts 2006 - 01:38 #6
Kanon :o) Takker mange gange...
Kendte ikke array_diff() før... Så tak for det :o)
Det er sjovt sommetider at se hvordan andre ville gribe det an. Man bliver jo let et vanedyr :o)
Avatar billede fixxxer Nybegynder
28. marts 2006 - 01:47 #7
Glad for at kunne hjælp :)
Avatar billede arne_v Ekspert
28. marts 2006 - 01:49 #8
hvis det er en nyere MySQL (4.1 eller 5.0) så:

DELETE FROM tabelnavn WHERE bruger<>'niels' AND id NOT IN (SELECT id FROM tabelnavn ORDER BY id DESC LIMIT 25)

eller

DELETE FROM tabelnavn WHERE bruger='niels' AND id NOT IN (SELECT id FROM tabelnavn WHERE bruger='niels' ORDER BY id DESC LIMIT 25)

lidt afhængig af hvad du mener
Avatar billede learner Praktikant
28. marts 2006 - 02:07 #9
arne_v:
Tak :o)
Kan man lave udtræk (select) samtidig med at man sletter (delete) ??
Avatar billede arne_v Ekspert
28. marts 2006 - 02:17 #10
det er ikke et udtræk som sådan - den select bruges bare til at bestemme hvad
man sletter
Avatar billede learner Praktikant
09. april 2006 - 23:45 #11
jeg får fejl i denne linie:
$query = mysql_query("SELECT picture_name FROM din_tabel WHERE id IN(".implode(',', $slet_id));

Jeg kan ikke se en fejl i linien... Kan du?

min sql version er 4.1 eller lidt nyere

jeg får denne fejl: 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 '' at line 1
Avatar billede fixxxer Nybegynder
10. april 2006 - 00:01 #12
Dum fejl..

$query = mysql_query("SELECT picture_name FROM din_tabel WHERE id IN(".implode(',', $slet_id).")");
Avatar billede learner Praktikant
10. april 2006 - 00:16 #13
Ja, det burde jeg have set selv... Sorry
Nu virker det :o)
100% ok

TUSIND TAK :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

BEC Financial Technologies

Business analyst (senior)

Nextway Software A/S

Software Architect

Netcompany A/S

Senior Network Engineer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Netværksarkitekt til Forsvarets Cyberdivision i Hvidovre