Avatar billede mysli Nybegynder
14. juni 2005 - 22:55 Der er 5 kommentarer og
1 løsning

Udfører kun 1. query og glemmer den 2.

function sortAfsnit($id, $way){
        $sql = $this->db->getArray("SELECT sort, parent FROM khs_afsnit WHERE id = '$id'");
        $count = $this->db->getRows("SELECT id FROM khs_afsnit WHERE parent = '$sql[parent]'");
       
        if ($way == "ned"){
            $c = $sql['sort'] + 1;
            return ($x = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$sql[sort]' WHERE sort = '$c' AND parent = '$sql[parent]'") &&
            $y = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$c' WHERE sort = '$sql[sort]' AND parent = '$sql[parent]'"));
           
        }       
        if ($way == "op"){
            $c = $sql['sort'] - 1;
            return (($x = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$c' WHERE sort = '$sql[sort]' AND parent = '$sql[parent]'")) &&
            ($y = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$sql[sort]' WHERE sort = '$c' AND parent = '$sql[parent]'")));
        }
        return false;
    }

Har denne function. Som i nok kan se, sorterer den i nogle afsnit.

Hvis man vælger at et afsnit skal op, tager den 'sort' - 1 og udskifter med 'sort' - derefter skal den række der har 'sort' - 1 have skiftet sort til 'sort'

Problemet er, at kun første query bliver udført, i hvert af de to tilfælde.

Hvis jeg kører en med "op" bliver dens 'sort' - 1, hvilket betyder jeg har 2 med samme 'sort'.
Avatar billede nielle Nybegynder
14. juni 2005 - 23:16 #1
Når man ønsker at bytte om på to værdier er man som regel nødt til at lægge et mellemled ind. Ellers ender man bare med at overskrive man bare den ene med den anden. Prøv at ret din:

if ($way == "ned")
{
    $c = $sql['sort'] + 1;
    return ($x = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$sql[sort]' WHERE sort = '$c' AND parent = '$sql[parent]'") &&
        $y = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$c' WHERE sort = '$sql[sort]' AND parent = '$sql[parent]'"));
}

- til noget i stil med:

if ($way == "ned")
{
    $c = $sql['sort'] + 1;
    return ($x = $this->db->runQuery("UPDATE khs_afsnit SET sort = 'SWAP' WHERE sort = '$c' AND parent = '$sql[parent]'") &&
        $y = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$c' WHERE sort = '$sql[sort]' AND parent = '$sql[parent]'") &&
        $z = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$sql[sort]' WHERE sort = 'SWAP' AND parent = '$sql[parent]'"));
}
Avatar billede barklund Nybegynder
14. juni 2005 - 23:17 #2
Hvorfor return'er du? Og hvorfor presser du dine to queries sammen i en lang pærevælling med logisk konjunktion? Og hvad returnerer dit db-objekt på en update-query (siden du bruger retur-værdien til at angive, om anden query skal udføres).

Prøv:

        if ($way == "ned"){
            $c = $sql['sort'] + 1;
            $x = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$sql[sort]' WHERE sort = '$c' AND parent = '$sql[parent]'");
            $y = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$c' WHERE sort = '$sql[sort]' AND parent = '$sql[parent]'");
            return $x && $y; // men hvorfor?
         
        }     
        if ($way == "op"){
            $c = $sql['sort'] - 1;
            $x = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$c' WHERE sort = '$sql[sort]' AND parent = '$sql[parent]'");
            $y = $this->db->runQuery("UPDATE khs_afsnit SET sort = '$sql[sort]' WHERE sort = '$c' AND parent = '$sql[parent]'");
            return $x && $y; // ja igen?
        }
        return false;

Så har du nok lidt mere held :)

--
Morten Barklund
Avatar billede nielle Nybegynder
14. juni 2005 - 23:29 #3
Hvis man vil bytte om på indholdet af $sort1 og $sort2 så nytter det ikke at skrive:

$sort1 = $sort2;
$sort2 = $sort1;

-  og det er faktisk lige det dine to SQL’er gør (og de blev faktisk begge to gennemført!).

I stedet må man indskyde en ekstra variabel til at huske den ene værdi:

$SWAP = $sort1;
$sort2 = $sort1;
$sort1 = $SWAP;

Og det er netop den funktion min ekstra SQL har i løsningen.
Avatar billede mysli Nybegynder
14. juni 2005 - 23:36 #4
Mange tak for det - skulle bare lige huske at ændre sort til varchar:)

Smid svar:)
Avatar billede mysli Nybegynder
14. juni 2005 - 23:51 #5
Ang din kommentar.

Jeg skifter jo aldrig værdien af $c og $sql[sort] mens jeg kører de to.

Men ligemeget, har stillet det op på en anden måde nu, og det virker:)
Avatar billede nielle Nybegynder
15. juni 2005 - 06:38 #6
Jeg er godt klar oper at mit ekempel ikke holder meget mere end - skal vi sige - 80%. Men det var også bare for at demonstrere hvad det egentlig var som gik galt. Lidt svært at gemmeskue det midt i alt det andet.

... og et svar.
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