Avatar billede tlunde Nybegynder
12. januar 2007 - 09:12 Der er 11 kommentarer og
1 løsning

Bytte om på 2 værdier i databasen??

Hej,
Jeg har eks disse 2 rækker i min database :

id | tekst | url | sortering
----------------------------
1 | bla | eb.dk | 1
2 | asdf | bt.dk | 2

Jeg har lavet en knap, med hvilken jeg skal jeg kunne ombytte de 2 værdier i "sortering". Hvis jeg trykker på den, så skal de 2 værdier i "sortering" byttes om. Hvordan gøres dette i SQL??
Avatar billede donslund Nybegynder
12. januar 2007 - 09:15 #1
Lav endnu et felt i din tabel der hedder swop.

Så laver du først en forespørgsel, der tildeler den ens sortering til swop og derefter den anden.
Til sidst sætter du sortering = swop på dem begge og de har dermed byttet plads.

Lidt langt, men det virker for mig.
Avatar billede tlunde Nybegynder
12. januar 2007 - 09:21 #2
hmm...den fangede jeg vis ikke helt :)
har du et kode-eksempel på det?
Avatar billede kalp Novice
12. januar 2007 - 09:23 #3
må man høre hvorfor du vil bytte om på dem?
det lyder som om det er noget du kan ordne med

ORDER BY sortering DESC
og
ORDER BY sortering ASC
Avatar billede tlunde Nybegynder
12. januar 2007 - 09:31 #4
kalp: De skal ikke sorteres...

Indholdet i databasen fungere som en menupunkter på en side indenfor bestemte sektioner på en side, den egentlige database ser mere sådan her ud nu.

id | fil | tekst | url | sortering
-----------------------------
1 | artikler.php | Teamer | tema.php | 1
2 | artikler.php | Fokus | artikler.php?action=sfa | 2
3 | artikler.php | Prædiken intro | artikler.php?action=sfa | 3
4 | artikler.php | Studie | artikler.php?action=sfa | 4
5 | artikler.php | Et ord med på vejen | artikler.php?action=sfa | 5
6 | artikler.php | Artikel links | artikler.php?action=sfa | 6
7 | artikler.php | Søg / Guide | artikler.php?action=sfa | 7
8 | search.php | Test | search.php?action=sfa | 1
10 | artikler.php | Test punkt | artikler.php?action=sfa | 7


alle "filer" der hedder artikler.php hører til sektionen "Artikler" på siden, og underpunkter der hører til den side skal så have "teksten" udprintet som punkterne, hvor "sortering" så er i hvilken rækkefølge de skal stå på siden.

I administrationsmodulet skal admin så have mulighed for at kunne flytte et menupunkt på eller ned. Dvs. at "Fokus" evt. skulle kunne flyttes ned under "Prædiken intro", og derfor skal id i "sortering" byttes rundt, når admin trykker på det link jeg har lavet til det, og det ser eks. sådan her ud: swapmenu.php?action=menu_ned&id=$id. I action=menu_ned, skal der så ligge et stykke kode der bytter den nuværende værdi i "sortering" ud med det id der er lige nedenunder...

Håber i forstår bedre nu??
Avatar billede fennec Nybegynder
12. januar 2007 - 09:39 #5
Gør det i PHP koden. Nu er det længe siden jeg har brugt PHP, så du får den i ASP:

function swap(fID1, fID2)
  set rs1 = conn.execute("select sortering from dinTabel where id="& fID1)
  set rs2 = conn.execute("select sortering from dinTabel where id="& fID2)
  tmp1 = rs1("sortering")
  tmp2 = rs2("sortering")
  conn.execute("update dinTabel set sortering="& tmp2 &" where id="& fID1)
  conn.execute("update dinTabel set sortering="& tmp1 &" where id="& fID2)
end function

Det kan gøres med færre select/update, men dette er den letforstålige udgave.
Avatar billede coderdk Praktikant
12. januar 2007 - 10:51 #6
UPDATE tabel SET sortering = 1 WHERE id = 2
UPDATE tabel SET sortering = 2 WHERE id = 1

? :)
Avatar billede donslund Nybegynder
12. januar 2007 - 10:55 #7
Det du skal have er, at du skal vide hvilke to der skal bytte plads. Derefter bytter du de tos sorterings-værdier. Dette kan du gøre ved at tilføje et felt der hedder swop. og så bruge det. Jeg skal se, om jeg kan finde et eksempel.
Avatar billede tlunde Nybegynder
12. januar 2007 - 11:08 #8
coderdk: Det virker ikke helt så nemt som sådan, da jeg også hele tiden skal vide hvad mit forrige og næste id er, og da id kan svinge, så er det vist lidt sværere...

Hvis jeg sletter et menupunkt med id=4, så er id-rækkefølgen nu en anden: 1,2,3,5,6,7
Avatar billede tlunde Nybegynder
12. januar 2007 - 11:09 #9
donslund: Hvis du har noget kode liggende, som virker noget ala dette, så vil jeg da meget gerne se det...
Avatar billede coderdk Praktikant
12. januar 2007 - 11:44 #10
Nejda:

Forrige:

SELECT id FROM tabel WHERE sortering < NUVÆRENDE ORDER BY sortering DESC LIMIT 1

Næste:

SELECT id FROM tabel WHERE sortering > NUVÆRENDE ORDER BY sortering LIMIT 1

:)
Avatar billede donslund Nybegynder
12. januar 2007 - 21:56 #11
Her er den kode jeg har brugt. Både for at flytte noget op i rækken og flytte noget ned. Det kan sikker gøres meget lettere.


<?
include("../db_config.php");
$num = mysql_result(mysql_query("SELECT COUNT(*) FROM page"),0);
if($num > 1){
    print "[";
    $indhold = mysql_query("SELECT * FROM page");
    while($data = mysql_fetch_array($indhold)){
        $thisswop = $data[swop];
    }
    $up = "";
    $down = "";
    $swopdown = mysql_query("SELECT * FROM page WHERE swop>$thisswop ORDER BY swop ASC LIMIT 1");
    $swopup = mysql_query("SELECT * FROM page WHERE swop<$thisswop ORDER BY swop DESC LIMIT 1");
    while($datadown = mysql_fetch_array($swopdown)){
        $down = $datadown[swop];
    }
    while($dataup = mysql_fetch_array($swopup)){
        $up = $dataup[swop];
    }
    if ($up != ""){
        print "<a href=\"pages/send.php?pageID=$pageID&ref=$ref&s=$data[swop]&sw=$up\" onfocus=\"blur();\"><img src=\"admin_gfx/swop_up.gif\" border=0 title=\"Flyt op\"></a>";
    }else{
        print "<img src=\"images/gfx/x.gif\" border=0 width=11 height=11>";
    }
    if ($down != ""){
        print "<a href=\"pages/send.php?pageID=$pageID&ref=$ref&s=$data[swop]&sw=$down\" onfocus=\"blur();\"><img src=\"admin_gfx/swop_down.gif\" border=0 title=\"Flyt ned\"></a>";
    }else{
        print "<img src=\"admin_gfx/slet.gif\" border=0 width=11 height=11>";
    }
    print        "] \n";
}
?>
Avatar billede tlunde Nybegynder
06. marts 2007 - 08:23 #12
Fik det desværre aldrig til at virke...
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