|
| Bytte id mellem to rækker i en tabel Fra : Søren Follmann |
Dato : 19-01-07 09:11 |
|
Jeg sidder og arbejder på et mindre CMS system, det jeg i sin
enkelthed mangler er at kunne ændre er rækkefølgen på punkterne i
en menu, som ligge i en tabel!
Derfor tænker jeg om det er muligt at bytte rundt på to id´er i
en tabel, også selvom de ikke lige ligger i rækkefølge altså id
1,3,4,7,8 etc?
Håber der er nogle dygtige folk det kan hjælpe!
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Martin (19-01-2007)
| Kommentar Fra : Martin |
Dato : 19-01-07 09:18 |
|
Søren Follmann wrote:
> Jeg sidder og arbejder på et mindre CMS system, det jeg i sin
> enkelthed mangler er at kunne ændre er rækkefølgen på punkterne i
> en menu, som ligge i en tabel!
>
> Derfor tænker jeg om det er muligt at bytte rundt på to id´er i
> en tabel, også selvom de ikke lige ligger i rækkefølge altså id
> 1,3,4,7,8 etc?
MEGET dum idé at rode rundt med det unikke ID (hvis det ellers er
auto_increment).
Så skulle du også ind og ændre alle de undersider til dette menupunkts
reference id.
Det nemmeste er at oprette et nyt felt i tabellen, kald det fx sorter og
skriv så her den ønskede position og ORDER BY sorter
| |
Søren Follmann (19-01-2007)
| Kommentar Fra : Søren Follmann |
Dato : 19-01-07 09:27 |
|
Martin wrote in dk.edb.internet.webdesign.serverside.php:
> Søren Follmann wrote:
> > Jeg sidder og arbejder på et mindre CMS system, det jeg i sin
> > enkelthed mangler er at kunne ændre er rækkefølgen på punkterne i
> > en menu, som ligge i en tabel!
> >
> > Derfor tænker jeg om det er muligt at bytte rundt på to id´er i
> > en tabel, også selvom de ikke lige ligger i rækkefølge altså id
> > 1,3,4,7,8 etc?
>
> MEGET dum idé at rode rundt med det unikke ID (hvis det ellers er
> auto_increment).
> Så skulle du også ind og ændre alle de undersider til dette menupunkts
> reference id.
>
> Det nemmeste er at oprette et nyt felt i tabellen, kald det fx sorter og
> skriv så her den ønskede position og ORDER BY sorter
Det er er selvfølgelig en mulighed, men igen, så mangler jeg at kunne
bytte rundt
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Martin (19-01-2007)
| Kommentar Fra : Martin |
Dato : 19-01-07 13:04 |
|
Søren Follmann wrote:
> Det er er selvfølgelig en mulighed, men igen, så mangler jeg at kunne
> bytte rundt
Nej da... det har du da...
Så laver du bare en php side hvor du kan enten vælge eller skrive hvad
nummer hvert emne skal have.
INSERT INTO tabel (navn,sorter) values ('Nr 10',10);
INSERT INTO tabel (navn,sorter) values ('Nr 5',5);
INSERT INTO tabel (navn,sorter) values ('Nr 50',50);
INSERT INTO tabel (navn,sorter) values ('Nr 20',20);
INSERT INTO tabel (navn,sorter) values ('Nr 2',2);
SELECT * FROM tabel ORDER BY sorter;
// Returnerer
ID: NAVN:
5 Nr 2
2 Nr 5
1 Nr 10
4 Nr 20
3 Nr 50
| |
Søren Follmann (20-01-2007)
| Kommentar Fra : Søren Follmann |
Dato : 20-01-07 09:33 |
|
Hvis jeg forstår dig rigtigt, så er det du går egentlig at lave et
sorterings ID, som man ikke brugere primary key til at sortere efter.
Det har jeg fanget man skal, men det jeg har brug for at at når den lister
dem op, så hvis jeg trykker skal den bytte "sorteringsID" med den
ovenover, og med ned, bytte ID, med den under. Man skal ikke kunne taste
det som tal, men kun trykke på en knap med pil og eller pil ned!
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Jesper Brunholm (20-01-2007)
| Kommentar Fra : Jesper Brunholm |
Dato : 20-01-07 10:45 |
|
Søren Follmann skrev:
> Hvis jeg forstår dig rigtigt, så er det du går egentlig at lave et
> sorterings ID, som man ikke brugere primary key til at sortere efter.
>
> Det har jeg fanget man skal
Glimrende, men så kald det for en "sorteringsnøgle" eller noget lignende
fremover, ID er betegnelsen for en unik identifikation, som hver
datapost kun har en af, og som eventuelt kæder den sammen med andre
tabellers dataposter, så det er ret befængt at snakke om at ændre på
id-er
>, men det jeg har brug for at at når den lister
> dem op, så hvis jeg trykker skal den bytte "sorteringsID" med den
> ovenover, og med ned, bytte ID, med den under. Man skal ikke kunne taste
> det som tal, men kun trykke på en knap med pil og eller pil ned!
Det er et spørgsmål om at lave et link med den nuværende sorteringsværdi
til en side hvor et php script modtager nuværende værdi ($bytfra) og
meldingen "byt ned" eller "byt op".
Hvis vi så antager at det er "byt med den ovenfor" (dvs. byt til lavere
sorteringsværdi). Jeg går ud fra at du kun har en post på hver
sorteringsværdi.
Så henter du to rækker (LIMIT 0,2) ud af databasen, hvor sorteringsværdi
er mindre end ($bytfra+1), og sorterer faldende (ORDER DESC BY
`ordervalue`), og laver to opdateringsstatements som du sender til
databasen, og så er den kørt.
Hvis du er meget nøjeregnende med at optimere antallet af databaseopkald
så kan du lægge foregående sorteringværdi og efterfølgende
sorteringsværdi i byt op og byt ned-linkene (så du sparer opkaldet hvor
du henter det ID som du skal bytte med ud).
Mvh
Jesper Brunholm
| |
Søren Follmann (21-01-2007)
| Kommentar Fra : Søren Follmann |
Dato : 21-01-07 01:31 |
|
Tror jeg kan følge dig, men har problemer med min sql syntaks:
if ($_GET["flytop"])
{
$forespop = mysql_query("SELECT * FROM indhold WHERE sortid >=
$_GET[flytopid] ORDER BY kategori DESC, sortid DESC LIMIT 2 ")
while($dataop = mysql_fetch_array($forespop))
{
print $dataop[sortid];
}
}
Jeg har opdelt punkterner i kategorier, det er bare et tal som så referer til
en kategori tabel. Når jeg så printer værdierne får jeg nogle helt forkerte
ud!
og linket hvis det kan bruges:
href="sider.php?flytop=1&flytopid=<?php print $data['id']; ?>"
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Jesper Brunholm (21-01-2007)
| Kommentar Fra : Jesper Brunholm |
Dato : 21-01-07 14:54 |
|
Søren Follmann skrev:
> Tror jeg kan følge dig, men har problemer med min sql syntaks:
>
> if ($_GET["flytop"])
> {
> $forespop = mysql_query("SELECT * FROM indhold WHERE sortid >=
> $_GET[flytopid] ORDER BY kategori DESC, sortid DESC LIMIT 2 ")
er flytopid et rigtigt id, eller det sortid som du faktisk skal bruge?
> og linket hvis det kan bruges:
> href="sider.php?flytop=1&flytopid=<?php print $data['id']; ?>"
Mit eksempel tog udgangspunkt i at du ikke bruger id, men sortid i den
her. Du kan også bruge id, men så skal du flytte lidt rundt på tingene.
I øvrigt vil jeg stadig anbefale at sorterings-værdien ikke hedder noget
med id (ikke mindst for at ingen tager fejl af hvad der er hvad)
Mvh
Jesper Brunholm
| |
Søren Follmann (21-01-2007)
| Kommentar Fra : Søren Follmann |
Dato : 21-01-07 22:21 |
|
Nu fik jeg det til at virke! Det var sortid og ikke id!
Mange tak for hjælpen!
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Jens Frøkjær (21-01-2007)
| Kommentar Fra : Jens Frøkjær |
Dato : 21-01-07 00:15 |
|
Martin skrev:
> Søren Follmann wrote:
>> Det er er selvfølgelig en mulighed, men igen, så mangler jeg at kunne
>> bytte rundt
>
> Nej da... det har du da...
> Så laver du bare en php side hvor du kan enten vælge eller skrive hvad
> nummer hvert emne skal have.
>
> INSERT INTO tabel (navn,sorter) values ('Nr 10',10);
> INSERT INTO tabel (navn,sorter) values ('Nr 5',5);
> INSERT INTO tabel (navn,sorter) values ('Nr 50',50);
> INSERT INTO tabel (navn,sorter) values ('Nr 20',20);
> INSERT INTO tabel (navn,sorter) values ('Nr 2',2);
>
> SELECT * FROM tabel ORDER BY sorter;
>
> // Returnerer
> ID: NAVN:
> 5 Nr 2
> 2 Nr 5
> 1 Nr 10
> 4 Nr 20
> 3 Nr 50
Hvordan har du oprettet tabellen så sorter ikke returneres når man
forespørger?
--
Jens F!
| |
Ukendt (19-01-2007)
| Kommentar Fra : Ukendt |
Dato : 19-01-07 14:20 |
|
> MEGET dum idé at rode rundt med det unikke ID (hvis det ellers er
> auto_increment).
> Så skulle du også ind og ændre alle de undersider til dette menupunkts
> reference id.
Hvis der er en logisk afhængighed mellem det unikke ID og en anden tabel,
vil der typisk være en foreign key constraint og har du designet den
ordentligt, vil den tage hånd om denne situation - f.eks. ON UPDATE CASCADE.
Men derudover har du ret i, at det er uhensigtsmæssigt at ændre på et ID.
- Daniel
| |
|
|