Avatar billede fragtrup Nybegynder
11. juni 2008 - 11:38 Der er 4 kommentarer og
1 løsning

Bytte værdi med næste post i recordsettet

Jeg har en tabel i MySQL med: ID, TITEL og INDX
Tabellen kan se sådan ud, sorteret efter INDX

1, Titel_1, 12
3, Titel_6, 56
2, Titel_34, 63
8, Titel_4, 106

Jeg vil gerne kunne bytte en posts INDX-værdi med den efterfølgende posts INDX.

Har du et fif til at gøre dette i PHP og MySQL?
Avatar billede jakobdo Ekspert
11. juni 2008 - 12:15 #1
Nu forstår jeg ikke hvordan du sortere, om du sortere på: 12, 56, 63 og 106 ?
Du kunne jo gøre det, at du tager

3, Titel_6, 56
Gemmer id 3 og værdi 56
Så tager du:
2, Titel_34, 63
Gemmer id 2 og værdi 63

Så opdatere du id = 3 får værdi 63
og id = 2 får værdi 56

Er det hvad du efterspørger ?
Avatar billede fragtrup Nybegynder
11. juni 2008 - 12:50 #2
Min sortering vil være: SELECT * FROM tabel ORDER BY indx;
Det kan give listen:
1, Titel_1, 12
3, Titel_6, 56
2, Titel_34, 63
8, Titel_4, 106

Jeg kan godt konstruere noget kode som bruger noget loop og en masse variabler og if sætninger. Men hvis man på en nem måde kunne bruge en funktion enten i SQL-sætningen eller bladre frem og tilbage i recordsættet i PHP så vil det da være nemmere. Men der er nok kun en vej.
Loops, if og variabler.
Avatar billede fragtrup Nybegynder
11. juni 2008 - 13:31 #3
Point til mig selv :)
Jeg fik det løst.
Jeg kalder siden med side.php?op=(indx-værdien)

    if (isset($_GET[op])){
        $query2 = "SELECT * FROM rest_gruppe ORDER BY indx DESC";
        $result2 = mysql_query($query2) or die(mysql_error());
        $stop = false;
        while($row2 = mysql_fetch_array($result2)) {
            if ($stop){
                $nextID = $row2[id];
                $nextIndx = $row2[indx];
                $stop = false;
            }
            if ($row2[indx] == $_GET[op]){
                $aktuelID = $row2[id];
                $stop = true;
            }
        }
        $query3 = "UPDATE tabel SET indx = ". $_GET[op] ." WHERE id = ". $nextID;
        mysql_query($query3) or die(mysql_error());

        $query4 = "UPDATE tabel SET indx = ". $nextIndx ." WHERE id = ". $aktuelID;
        mysql_query($query4) or die(mysql_error());
    }
Avatar billede fragtrup Nybegynder
11. juni 2008 - 13:32 #4
Ups. Lille fejl med et tabel navn.

    if (isset($_GET[op])){
        $query2 = "SELECT * FROM tabel ORDER BY indx DESC";
        $result2 = mysql_query($query2) or die(mysql_error());
        $stop = false;
        while($row2 = mysql_fetch_array($result2)) {
            if ($stop){
                $nextID = $row2[id];
                $nextIndx = $row2[indx];
                $stop = false;
            }
            if ($row2[indx] == $_GET[op]){
                $aktuelID = $row2[id];
                $stop = true;
            }
        }
        $query3 = "UPDATE tabel SET indx = ". $_GET[op] ." WHERE id = ". $nextID;
        mysql_query($query3) or die(mysql_error());

        $query4 = "UPDATE tabel SET indx = ". $nextIndx ." WHERE id = ". $aktuelID;
        mysql_query($query4) or die(mysql_error());
    }
Avatar billede jakobdo Ekspert
11. juni 2008 - 13:46 #5
Du kan lave det smartere.

Sådan f.eks.:

<?php
if (isset($_GET['op']) && is_numeric($_GET['op'])){
    $indx = intval($_GET['op']);
    $result = mysql_query("SELECT id FROM rest_gruppe WHERE indx = $indx LIMIT 1;") or die(mysql_error());
    if(mysql_num_rows($result)==1){
        $row = mysql_fetch_assoc($result);
        $id = $row['id'];
       
        $result2 = mysql_query("SELECT id,indx FROM rest_gruppe WHERE indx > $indx ORDER BY indx DESC LIMIT 1;") or die(mysql_error());
        if(mysql_num_rows($result2)==1){
            $row2 = mysql_fetch_assoc($result2);
            $next_id = $row2['id'];
            $newx_indx = $row2['indx'];
           
            $query3 = "UPDATE tabel SET indx = " . $indx . " WHERE id = " . $next_id . " LIMIT 1";
            mysql_query($query3) or die(mysql_error());

            $query4 = "UPDATE tabel SET indx = " . $next_indx . " WHERE id = " . $id . " LIMIT 1";
            mysql_query($query4) or die(mysql_error());
        }
    }
}
?>

Og selv tak for hjælpen...
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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