/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
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



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste