Avatar billede discotk Nybegynder
22. januar 2010 - 16:16 Der er 3 kommentarer og
1 løsning

Sortering (ryk op/ned)

Hej eksperter!

Jeg er igang med noget kringleværk her, som jeg ved i kan hjælpe mig med... Here we go:

Hovedsagligt vil jeg gerne kunne sortere mine menupunkter, men lad mig uddybe mit problem, for det er ikke så simpelt endda...

Jeg har en tabel (sideindhold) der ser således ud:

+----+------+---------+--------+------+
| id | navn | indhold | mainid | sort |
+----+------+---------+--------+------+
|  1 | BLA1 |  Lorem1 |      0 |    1 |
+----+------+---------+--------+------+
|  2 | BLA2 |  Lorem2 |      0 |    2 |
+----+------+---------+--------+------+
|  3 | bla3 |  Lorem3 |      1 |    3 |
+----+------+---------+--------+------+
|  4 | bla4 |  Lorem4 |      1 |    4 |
+----+------+---------+--------+------+
|  5 | bla5 |  Lorem5 |      2 |    5 |
+----+------+---------+--------+------+
|  6 | bla6 |  Lorem6 |      2 |    6 |
+----+------+---------+--------+------+

mainid 0 = hovesider
mainid 1 = tilknyttet id 1 (altså underside til BLA1)
-------------------------------------------------------

For at liste de forskellige underpunkt under de forskellige hovedpunkter har jeg følgende:

<?php $query_rsMainpages = mysql_query("SELECT * FROM sideindhold WHERE mainid = 0");
      while ($navi = mysql_fetch_array($query_rsMainpages)) { ?>
     
  <?php echo "$navi[navn]"; ?><br/>

<?php if ($menu_id = $navi['id']) { $navi_query2 = mysql_query("SELECT id, navn, mainid FROM sideindhold WHERE mainid='$menu_id'");
      while ($navi2 = mysql_fetch_array($navi_query2)) { ?>
     
    <?php echo "$navi2[navn]"; ?><br/>
   
  <?php }}?>
<?php } ?>


Eks 001.

BLA1
-Bla3
-Bla4
BLA2
-Bla5
-Bla6

-------------------------------------------------------

Jeg kan sagtens smide en sort funktion på, i form af $_GET['PageOp'] eller $_GET['PageNed'] hvor man bytter numre via sort, men så sorterer den efter det id der ligger tættetst... men det kan jo sagtens ligge under et andet menupunkt, hvilket kan resultere i at den ikke rykker sig før man trykker mange gange på den givne funktion.

Spørgsmålet er så... hvordan smider jeg en sort funktion på, så man kan sætte dem i rækkefølge, men under et bestemt hovedpunkt?

Eks 002.

BLA2 // sort = 1
-Bla6 // sort = 5
-Bla5 // sort = 6
BLA1 // sort = 4
-Bla3 // sort = 2
-Bla4 // sort = 3

Skriv endelig hvis i er i tvivl om noget.

På forhånd tak.
Avatar billede intenz Novice
22. januar 2010 - 16:24 #1
Måske forstår jeg dit spørgsmål forkert, men du har jo to mysql kald. Det ene henter hovedmenu punktet og det andet dens underpunkter.

Kan du så ikke bare bruge mysql's order by?
Altså i den stil her:
<?php $query_rsMainpages = mysql_query("SELECT * FROM sideindhold WHERE mainid = 0 ORDER BY sort ASC");
      while ($navi = mysql_fetch_array($query_rsMainpages)) { ?>
     
  <?php echo "$navi[navn]"; ?><br/>

<?php if ($menu_id = $navi['id']) { $navi_query2 = mysql_query("SELECT id, navn, mainid FROM sideindhold WHERE mainid='$menu_id' ORDER BY sort ASC");
      while ($navi2 = mysql_fetch_array($navi_query2)) { ?>
Avatar billede zynzz Praktikant
22. januar 2010 - 16:28 #2
Altså hoved menuen er vel altid den samme, om du trykker op eller ned??!

Prøv at kig på:

http://www.eksperten.dk/spm/669557
Avatar billede discotk Nybegynder
23. januar 2010 - 14:57 #3
#1, det kan du ha ret i, men hvordan får jeg den til at skifte plads med hinanden? Menuen kan jo sagtens komme til at se sådan her ud:

BLA1 // order id: 3
-Bla1 // order id: 45
-Bla2 // order id: 63
BLA2 // order id: 4
-Bla3 // order id: 34
-Bla4 // order id: 47

Men min tabel-struktur kan jo sagtens se sådan her ud:
BLA2 // id: 1
Bla4 // id: 2
Bla3 // id: 3
BLA1 // id: 4
Bla2 // id: 5
Bla1 // id: 6

Så nytter det ikke noget at jeg tager og bytter plads med den der står nærmest i tabellen, men den der står nærmest tabellen hvor mainid'et er det sammen.. eller hvad?
Jeg er gået lidt kold på det, og mangler et kick-start, nogle bud?
Avatar billede discotk Nybegynder
24. januar 2010 - 16:15 #4
Fandt en løsning.. skulle bare gøre som jeg havde regnet med, netop at tilknyttet den til mainid.

Men her er løsningen hvis nogle skulle være ønske sig den...

<?php

if (is_numeric($_GET['id']) && !empty($_GET['sort']))
{
    $currentSort = 0;
    $currentID = mysql_real_escape_string($_GET['id']);
   
    $moveSort = 0;
    $moveID = 0;

    $sql = "SELECT sort, mainid FROM sideindhold WHERE id = " . $currentID;
    //echo "DEBUG #1: " . $sql . "<br>";
    $query = mysql_query($sql) or die(mysql_error());
    if (mysql_num_rows($query) > 0)
    {
        $row = mysql_fetch_assoc($query);
        $currentSort = $row["sort"];
        $mainid = $row["mainid"];
    }

    switch ($_GET['sort'])
    {
        case "op" :
            $sql = "SELECT id, sort FROM sideindhold WHERE sort < " . $currentSort . " AND mainid = " . $mainid . " ORDER BY sort DESC LIMIT 1";
            //echo "DEBUG #2a: " . $sql . "<br>";
            $query = mysql_query($sql) or die(mysql_error());
            break;
        case "ned" :
            $sql = "SELECT id, sort FROM sideindhold WHERE sort > " . $currentSort . " AND mainid = " . $mainid . " ORDER BY sort ASC LIMIT 1";
            //echo "DEBUG #2b: " . $sql . "<br>";
            $query = mysql_query($sql) or die(mysql_error());
            break;
    }
   
    if (mysql_num_rows($query) > 0)
    {
        $row = mysql_fetch_assoc($query);
        $moveID = $row['id'];
        $moveSort = $row['sort'];
    }
   
    if ($moveSort > 0)
    {
        $sql = "UPDATE sideindhold SET sort = " . $moveSort . " WHERE id = " . $currentID;
        //echo "DEBUG #3a: " . $sql . "<br>";
        $query = mysql_query($sql) or die(mysql_error());

        $sql = "UPDATE sideindhold SET sort = " . $currentSort . " WHERE id = " . $moveID;
        //echo "DEBUG #3b: " . $sql . "<br>";
        $query = mysql_query($sql) or die(mysql_error());
    }
}
?>

<?php //her trækker man sine data ud (while-funktion ex.)
      //og bruger kommandoerne SIDENAVN.php?id=ID&sort=op eller SIDENAVN.php?id=ID&sort=ned ?>

Men tak for jeres interesse!
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