Avatar billede webweaver Praktikant
08. maj 2007 - 20:38 Der er 11 kommentarer og
1 løsning

Brug for lidt vejvisning til et "tal-system".

Hej proffer.

Jeg er gået lidt i stå med mit nyhedssystem.
Man skal kunne vælge en prioriteret rækkefølge på nyheder, og det vil jeg lave via nogle tal, hvor 1 er, den øverste nyhed, 2 den næste og så videre .. Men, jeg kan faktisk ikke lige regne ud hvordan dette laves helt alligevel.

Indtil videre har jeg et felt i DB til tallet, og jeg kan også godt få den til at skrive 1 ud for den første nyhed jeg skriver, og 2 ud for den næste etc.. Men den skal jo virke lige omvendt, og det ved jeg ikke hvordan laves lettest? Altså sådan så den første nyhed jeg skriver, for id 1, og så den anden nyhed jeg skriver, får også id 1, og så bliver den første nyhed opdateret til id 2 .. Sådan så nyeste nyhed er øverst, og tallene passer.

Håber I forstår hvad jeg mener?

Hvordan laves det egentlig mest effekttivt?
Er det noget med noget UPDATE på den/de forrige nyhed(er), hver gang man skriver en ny eller hvorledes?

Håber I kan hjælpe mig lidt på vej :)
På forhånd mange tak :D

Mvh. Lasse Jensen
Avatar billede jakobdo Ekspert
08. maj 2007 - 20:45 #1
1 ved nummer 1 er jo ok!
Du kan lave
ORDER BY dit_nummer DESC
ORDER BY dit_nummer ASC

ASC og DESC virker så den sortere stigende eller faldende.
Avatar billede jakobdo Ekspert
08. maj 2007 - 20:47 #2
Måske du kunne overveje noget i denne stil: http://www.codebreaker.dk/exp/669557exp.php
Avatar billede webweaver Praktikant
08. maj 2007 - 21:04 #3
Hej Jakobdo.

Jeg benytter mig allerede af ASC og DESC, men de i sig selv har ikke den store effekt. I øjeblikket bruger jeg ASC, for sådan får hver nyhed et tal, som er 1 større end det forrige.. og dermed bliver til 1 2 3 4 .. Den jeg har brug for er DESC, men man kan ikke lave systemet sådan, da dette ikke kan virke i praksis. Ved DESC får den første nyhed selvfølgelig nummer 1 .. Så tjekker den ellers hvad tallet er på den forrige nyhed, når man skriver en ny.. Det er som sagt 1, og dermed bliver den næste 2, da jeg har sat den til at lægge 1 til. Men så kommer problemet, fordi så næste gang tjekker den jo igen, og med DESC tager den den ældste først, og den er jo stadig 1, og dermed bliver tredie nyhed også 2, og sådan vil resten af nyhederne blive.. Så det virker desværre ikke. Og udover det vil den nyeste nyhed stadig ikke få tallet 1 og så videre ..

Tak for linket, det viser ihvertfald hvordan jeg evt. kan lave en op/ned funktion.
Men det viser ikke hvordan jeg løser det med tallene stadig, og det er det som skal fikses først.

Tallet det er synligt for folk, så det er dermed ikke ligegyldigt om det er i rækkefølge eller ej. Det skal passe med 1 øverst, 2 under, 3 ...

Men altså der må da være en forholdsvis simpel måde. Jeg har 5 nyheder fx.. Den nyeste har nummer 1, den ældste nummer 5. Hvordan laves dette?

På forhånd tak :)

Mvh. Lasse Jensen
Avatar billede jakobdo Ekspert
08. maj 2007 - 21:15 #4
I stedet for at benytte næste (+ 1) og forrige (- 1), så kunne du jo lave et opslag via sql:
NÆSTE: SELECT id FROM nyheder WHERE id > $ID ORDER BY id ASC LIMIT 1
FORRIGE: SELECT id FROM nyheder WHERE id < $ID ORDER BY id DESC LIMIT 1
Avatar billede jakobdo Ekspert
08. maj 2007 - 21:16 #5
Lasse Jensen: Er det ikke "gamle" 1go Lasse Jensen?
Avatar billede webweaver Praktikant
08. maj 2007 - 23:54 #6
Næste, forrige? .. Jeg skal jo lave en funktion som kan rykke op og ned på nyhederne i forhold til hinanden, og ikke en næste/forrige funktion. Kan ikke helt regne ud, hvordan jeg får opslaget i sql til at virke der? Og samtidig skal sorterings tallet være synligt, og i rækkefølge.

Altså til at starte med, hvis du kender en metode du vil dele omkring det med nyhederne får et tal, startende fra 1 af. Hvor den nyeste er 1 og den ældste er det sidste tal i rækken .. Hvad ville du gøre her?

Altså jeg har da nogle ideer, som jeg ikke har kigget nærmere på endnu. Men fx når man poster en nyhed, trækker den samtidig de forrige nyheder ud, og lægger 1 til alle dem. Det vil sige at de er 1 2 3 ... så bliver de nu 2 3 4 , og der er plads til nye nyhed, på førstepladsen. Men er der en lettere løsning?

Og jeps, det er også mig som er Lasse Jensen, redaktør inde fra 1go.dk af. Hehe
Avatar billede webweaver Praktikant
12. maj 2007 - 12:57 #7
Hej igen.

Jeg har rodet lidt med det, og er ærligt talt ikke kommet meget videre desværre ;(
Hvis jeg skriver;

                                $db = mysql_connect("$mysqlHost", "$mysqlUser", "$mysqlPassword");
                                mysql_select_db("$mysqlDb", $db);
                               
                                $query = mysql_query("SELECT sort FROM News ORDER BY sort ASC") or die(mysql_error());
                               
                                while ($data = mysql_fetch_array($query)) {
                               
                                    $sort = $data['sort'];                               
                                    $sort++;
                                                           
                                    mysql_query("UPDATE News SET sort = '$sort' ORDER BY sort ASC") or die(mysql_error());
                               
                                }

Burde den så ikke hive 'sort' ud. lægge 1 til, og så opdatere den med det nye tal?
Det gør den faktisk også. Men ikke helt korrekt. I min INSERT er $sort = 1; .. Nå men så poster en nyhed, burde 1 blive til 2 .. Det gør den. Men så når man poster 3. gang, så burde 2 bliver til 3, 1 til 2 og den nye 1.. Men i stedet bliver de gamle nyheder bare allesammen 3 i stedet for. Hvordan kan det være? Det virker som om den opdaterer det hele "ens"?

På forhånd tak :)

Mvh. Lasse Jensen
Avatar billede jakobdo Ekspert
13. maj 2007 - 19:10 #8
Test lige denne:

$db = mysql_connect("$mysqlHost", "$mysqlUser", "$mysqlPassword");
mysql_select_db("$mysqlDb", $db);
                             
$querySort = mysql_query("SELECT COUNT(id) AS mySort FROM News") or die(mysql_error());
if(mysql_num_rows($querySort) == 1)
{
    $mySort = mysql_result($querySort,0);
   
    $query = mysql_query("SELECT id,sort FROM News ORDER BY sort ASC") or die(mysql_error());
    while($row = mysql_fetch_array($query))
    {
        mysql_query("UPDATE News SET sort = '$mySort' WHERE id = ".$row['id']." LIMIT 1") or die(mysql_error());
        $mySort--;
    }
}
Avatar billede webweaver Praktikant
15. maj 2007 - 23:42 #9
Fantastisk. Det ser ud til at virke, efter jeg flyttede lidt rundt i resten af koden. Der skulle lige byttes om på rækkefølgen af nogle ting, og så skulle ASC være DESC, og så var den ellers hjemme :)

Indtil videre har jeg ikke gennemskuet nogle fejl i scriptet, så tror det er som det skal være :)

Så mange tak for hjælpen, du kan jo bare smide et svar, hvis du gerne vil have dine point :)

Mvh. Lasse Jensen
Avatar billede jakobdo Ekspert
16. maj 2007 - 07:58 #10
Svar!
Avatar billede jakobdo Ekspert
16. maj 2007 - 16:15 #11
Takker for point.
Avatar billede webweaver Praktikant
16. maj 2007 - 17:24 #12
Var da så lidt ;D
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