08. maj 2007 - 20:38Der 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
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?
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
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
$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"?
$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--; } }
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 :)
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.