Avatar billede lothario Nybegynder
16. april 2005 - 11:13 Der er 16 kommentarer og
1 løsning

Auto-Sort ID

Hej

Jeg har en table, hvor der ofte bliver skiftet noget ud. Det får så ID til selvfølgelig at blive højere og højere. Jeg ville hørte om der findes en funktion, der kan "nulstille" id'en, så den auto-sorterer alt i tabellen, startende fra 1.

F.eks:

ID    Link      Descr
54    Her      Flot
121  Der      Pæn

Bliver til

ID    Link      Descr
1    Her      Flot
2    Der      Pæn


Det jeg skal bruge det til, er at tabellen indeholder info om nogle billeder. Et link og en beskrivelse. Jeg bruger så en while-løkke, til at vise billederne med. While-løkken finder hvert enkelt billede via deres id, men hvis id pludselig er f.eks 1000, skal løkken jo køre længere og længere, før alle billederne er vist, selvom der måske kun er 3 billeder.

Håber I forstår.
Avatar billede barklund Nybegynder
16. april 2005 - 11:19 #1
Det er ikke databasens job at lave fortløbende nummerering. Skal det laves, er det meget besværligt. Du bør istedet lave dette i dit system uden om og bruge LIMIT og OFFSET.
Avatar billede sukos Juniormester
16. april 2005 - 11:19 #2
?
Du skal da vist vise noget kode.
(eller, er ikke lige helt med på hvad du mener :O])
Avatar billede barklund Nybegynder
16. april 2005 - 11:19 #3
Og da dit system uden om er PHP, så er det heri, det skal håndteres.
Avatar billede sukos Juniormester
16. april 2005 - 11:20 #4
Nåh, vi er da vist eninge, barklund? :O)
Avatar billede lothario Nybegynder
16. april 2005 - 11:28 #5
OK, her er while-løkken. Som i kan se kører jeg kun med poster i tabellen med id under 100. Håber ikke min kode er for rodet. Det er kun 2 dage siden jeg begyndte at lege med php.

while (100>$num) {
$num=$num+1;
$help = mysql_query("SELECT * FROM pics WHERE ID='$num'");
$check = mysql_fetch_array($help);



if ($check) {

$check_tmp = mysql_query("SELECT * FROM pics WHERE ID='$num'");

$check = mysql_fetch_array($check_tmp);

$id=$check['ID'];
$desc=$check['PicsDesc'];
$link=$check['PicsLink'];



?>





<tr>    <td width="15%"><img src="<?print $link?>" height="100">
        <form action="update_pic.php" method="post">   
    <input type="hidden" name="idd" value="<?print $id;?>">
    <td width="15%"><textarea name="desc" rows="5" cols="40" ><? print $desc;?></textarea>
    <td width="12%" align="center"><input type="submit" name="edit" value="Update Info">
    </form>
        <td width="12%" align="center">
        <form action="del_pic.php" method="post">
            <input type="hidden" name="del" value="<?print $id;?>">
            <input type="submit" name="del_btn" value="Delete">
        </form>
   


if ($check) {

$check_tmp = mysql_query("SELECT * FROM pics WHERE ID='$num'");

$check = mysql_fetch_array($check_tmp);

$id=$check['ID'];
$desc=$check['PicsDesc'];
$link=$check['PicsLink'];
$stream=$check['TrackStream'];


?>





<tr>    <td width="15%"><img src="<?print $link?>" height="100">
<form action="update_pic.php" method="post">   
    <input type="hidden" name="idd" value="<?print $id;?>">
    <td width="15%"><textarea name="desc" rows="5" cols="40" ><? print $desc;?></textarea>
    <td width="12%" align="center"><input type="submit" name="edit" value="Update Info">
    </form>
        <td width="12%" align="center">
        <form action="del_pic.php" method="post">
            <input type="hidden" name="del" value="<?print $id;?>">
            <input type="submit" name="del_btn" value="Delete">
        </form>
Avatar billede lothario Nybegynder
16. april 2005 - 11:32 #6
Når jeg så tilføjer og fjerner flere rows til tabellen pics, stiger ID jo fortløbende. Og så kan jeg ligesågodt ændre den første linje til:

while(10000000000>$num) hvis jeg skal fortsætte sådan.
Avatar billede barklund Nybegynder
16. april 2005 - 11:35 #7
Det er en meget mærkelig PHP. Hvorfor henter du ikke bare 100 elementer ud af databasen ved at bruge LIMIT og OFFSET? Det er da mere logisk.
Avatar billede sukos Juniormester
16. april 2005 - 11:35 #8
Er ikke helt med på hvad det er du vil med scriptet?

Og hvor får de 100 fra?
Og hvor kommer $num fra?
Avatar billede lothario Nybegynder
16. april 2005 - 11:39 #9
hvordan bruger jeg limit og offset. er ikke stødt på de funktioner før

100 er bare en grænse jeg har sat i mangel af bedre.
$num er en tæller (starter med at være 0, det er ikke lige med i den kode jeg har vist).
Avatar billede barklund Nybegynder
16. april 2005 - 12:13 #10
SELECT * FROM table LIMIT 100 OFFSET 0

Så får du automatisk de første 100 rækker ud - uanset deres id'er.

--
Morten Barklund
Avatar billede lothario Nybegynder
16. april 2005 - 12:34 #11
Jow, det virker godt nok meget nemmere. Men hvordan skelner jeg så mellem de forskellige rækker?
Avatar billede barklund Nybegynder
16. april 2005 - 12:40 #12
Du henter dem en af gangen i et loop.

Altså noget med:

$result = mysql_query("SELECT * FROM pics LIMIT 100 OFFSET 0");
while($row = mysql_fetch_array($result)) {
    // gør noget med hver $row
}

Sådan gør alle vi andre jo :)

--
Morten Barklund
Avatar billede lothario Nybegynder
17. april 2005 - 01:33 #13
Jamen, så vil jeg da gøre som jer :) I hvert fald virker det gnidningsfrit, så jeg takker med point, ved et svar.
Avatar billede barklund Nybegynder
17. april 2005 - 01:46 #14
Hehe, helt fint :)
Avatar billede barklund Nybegynder
17. april 2005 - 01:48 #15
Hov :)
Avatar billede barklund Nybegynder
17. april 2005 - 01:51 #16
Hey tak - og sov godt - nu vil jeg tage i byen og spille pool :)
Avatar billede lothario Nybegynder
17. april 2005 - 01:55 #17
Du må hygge dig.
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