Avatar billede sukos Juniormester
28. marts 2005 - 03:08 Der er 29 kommentarer og
1 løsning

query som henter row før og efter, det row som er valgt

Hejsa
Har en brugertabel.
Har så en side, hvor man kan se brugernavne, og klikke på et navn for at se info.
Når man har valgt et navn, vil jeg gerne kunne linke til forrige brugernavn og næste brugernavn.
Mit problem opstår fordi det er muligt at vælge i hvilken rækkefølge brugernavne skal vises, navn, admin, og oprettelsetid

Og her kan jeg sgutte finde ud af at lave en eller to query som henter forrige og næste brugernavn, eller en enkelt, for den sags skyld!

Findes der en "mysql_function" som kan gøre det?

Eks.
1 => admin
2 => test
5 => æsel
7 => meretest

Vælger man f.eks. at sortere efter navn, og ser profil for meretest, skal jeg finde admin (forrige) og test (næste)

Og den "står stille" lige pt.
Avatar billede sukos Juniormester
28. marts 2005 - 03:09 #1
altså den med "de små grå"
Avatar billede bromer Nybegynder
28. marts 2005 - 03:10 #2
fortsætter lige fra anden tråd :) Hvilken MySQL version benytter du?
Avatar billede sukos Juniormester
28. marts 2005 - 03:11 #3
4-01 vist nok, 4+ i hvertfald
Avatar billede sukos Juniormester
28. marts 2005 - 03:14 #4
En query som "garanterer" at viste brugernavn også er med, ville være fint!
Så ville jeg lave et array, id => navn, og på den måde fidne ud af forrige og næste
Avatar billede sukos Juniormester
28. marts 2005 - 03:16 #5
og b.t.w. hellere fyrre en masse if'er af, end at lave en query som er versions afhængig
Avatar billede bromer Nybegynder
28. marts 2005 - 03:18 #6
Okay. Min tanke var umiddelbart at lave den normale select og så køre alle rækker igennem indtil du rammer den række du skal bruge. Hvis du benyttede en ny MySQL version (såsom 5.0.3) kunne du oprette en Stored Procedure [1], så data ikke skulle overføres til PHP. I PHP bør du kunne lave noget lignende:

<?
$rows = array();
while($row = <hent_fra_database>) {
if (<row matcher den vi gerne vil vise>) {
    $rows[] = $buf;
    $rows[] = $row;
    $rows[] = <hent_fra_database>
    break;
}
$buf = $row;
}
?>

så burde du have de tre rækker du gerne vil have i $rows



[1] http://dev.mysql.com/doc/mysql/en/create-procedure.html
Avatar billede sukos Juniormester
28. marts 2005 - 03:22 #7
hmhm, ja, sad lige og overvejede at lægge alle id, navn i en txtfil, (x-antal alt efter mulige sorteringer) og ved visning hente linienr for viste, og på den måde hente forrige og næste.

Den du lige tænker på der, skal jeg lige tænke lidt over :O)
Avatar billede bromer Nybegynder
28. marts 2005 - 03:25 #8
Jeg tror det vil påvirke den generelle performence. Jeg er sikker på at mit forslag vil være hurtigere end, hvis du skal søge i .txt filer! Derudover har du det ekstra besvær med at lægge data ud i filen. Så hellere oprette en ny tabel, hvor data er lagt som du ville have gjort i .txt filen.
Avatar billede sukos Juniormester
28. marts 2005 - 03:30 #9
?
det tror jeg nu ikke ville være hurtigere.

Synes selv at PHP er suverænt hurtig til at håndtere "lokale" filer.
Og ændre data i fil, skal jo kun gøres når der ændres i brugertabel. (oprettes/slettes)

Og kan ikke lige se hvordan du ville gøre det, med dit forslag?
Avatar billede sukos Juniormester
28. marts 2005 - 03:31 #10
Men ok, osse mig som ikke er helt inde i query's (langt fra!) :O] => ;O[
Avatar billede bromer Nybegynder
28. marts 2005 - 04:05 #11
Du skal tænke på at du skal have alle rækkkerne fra din tabel i din fil. Jeg kan stats-garentere at MySQL kan sortere og gøre ting hurtigere :)
Avatar billede sukos Juniormester
28. marts 2005 - 04:18 #12
Men, i dit eksempel:

hvis row er lig med id, hvordan vil du så hente forrige row og næste row?
Avatar billede sukos Juniormester
28. marts 2005 - 04:19 #13
Du laver et array, men hvad putter du i det? Fatter intet lige nu, (igen sgu!)
Avatar billede bromer Nybegynder
28. marts 2005 - 04:20 #14
Jeg putter alt data i, der er i tabellen (eller det som du vælger at hente ud fra den i din query)
Avatar billede sukos Juniormester
28. marts 2005 - 04:22 #15
?
ja, jeg skal jo ikke ha' hele tabbellen i et array!

ex.
Der hentes hvor sort er navn.
Hvordan vil putte forrige row og næste row ind i det array?
Avatar billede sukos Juniormester
28. marts 2005 - 04:25 #16
arrghh, du vil ha' at jeg ved visning af et navn, "while'r" hele tabellen igennem igen?
Avatar billede sukos Juniormester
28. marts 2005 - 04:25 #17
Ikke igen, jeg starter jo med at vælge specifikt row, og skal derefter finde forrige og næste
Avatar billede sukos Juniormester
28. marts 2005 - 04:26 #18
Eller, når jeg har fundet det specifikke row, hvordan kan jeg så lægge forrige og næste ind i array'et?
hvordan ville du stille "krav" op?
Avatar billede bromer Nybegynder
28. marts 2005 - 04:27 #19
Hvis du alligevel kører hele tabellen igennem kan du jo indflette mit eksempel der?
Avatar billede sukos Juniormester
28. marts 2005 - 04:48 #20
Der røg netværket sgu lige?
Kunne hverken komme på den ene eller den anden computer?

anyway, jeg fatter ikke hvordan du ville opstille krav i query?

enten
forrige, ligenu og næste query

eller

ligenu query
forrige og næste query
Avatar billede sukos Juniormester
28. marts 2005 - 04:56 #21
hmm, altså,
man kan sortere på navn, admin og oprettelsestid
default er navn

en profil skal vises, id=5 og sortering er navn

skal så bruge en (eller flere) query som henter id og navn i row'et før og efter det row skal vises

Og jeg fatter ikke hvordan du vil lave den query, sætte kreterier op?
Avatar billede arne_v Ekspert
28. marts 2005 - 10:41 #22
SELECT navn
FROM tabel
WHERE navn < 'test'
ORDER BY navn DESC
LIMIT 1

og

SELECT navn
FROM tabel
WHERE navn > 'test'
ORDER BY navn ASC
LIMIT 1

måske
Avatar billede arne_v Ekspert
28. marts 2005 - 10:43 #23
eventuelt kombineret

(SELECT navn
FROM tabel,admin,oprettelsetid
WHERE navn < 'X'
ORDER BY navn DESC
LIMIT 1)
UNION
(SELECT navn,admin,oprettelsetid
FROM tabel
WHERE navn = 'X')
UNION
(SELECT navn,admin,oprettelsetid
FROM tabel
WHERE navn > 'X'
ORDER BY navn ASC
LIMIT 1)
Avatar billede sukos Juniormester
28. marts 2005 - 11:41 #24
damn, hvor svært kan det være?
selvf. hente navn som er > eller < end viste navn, sorteret efter valgte sortering!

arne_v 200 point til dig hvis du smider et svar!
Havde overhovedet ikke tænkt på at navn kunne være større eller mindre

Dit andet forslag er jeg ikke lige med på?
Avatar billede sukos Juniormester
28. marts 2005 - 11:43 #25
argghhh, shit, sidder og loader den forkerte fil!
Nu virker lortet ikke igen! :O)((((( Flere grå hår)
Avatar billede arne_v Ekspert
28. marts 2005 - 11:44 #26
svar
Avatar billede arne_v Ekspert
28. marts 2005 - 11:45 #27
Det nadet forslag var bare en ide til hvordan du kunen hente det hele i en query
med union
Avatar billede sukos Juniormester
28. marts 2005 - 12:04 #28
Nej, det virker ikke for mig, at bruge navnet som "middel"
Så længe der ikke er valgt nogen form for sortering, har jeg ingen problemer.
default sort er navn

...............

Flg. virker fordi jeg putter alle id'er i et array! og på den måde finder hvilken jeg skal linke til:

http://users.showsource.dk/users/brugere.php?sort=oprettid&userid=2

http://users.showsource.dk/users/brugere.php?userid=5

http://users.showsource.dk/users/brugere.php?sort=admin&userid=8
Avatar billede arne_v Ekspert
28. marts 2005 - 12:14 #29
Mit forslag baserer sig på at det er samme felt som du sorterer på
som du søger efter.

Skal der sorters efter navn så kender du navn. Skal der sorteres efter id så
kender du id.

Men du vil sortere efter navn men kender id ?

Det kan naturligvigs gøres med 2 ekstra queries, - fordi når du har
hentet rækken med den kendte id så kender du navnet.

Men i en enkelt query vil du skulle have MySQL 4.1 (og subqueries for at kune få det
til at virke).

(med beskedne data mængder er arrayet iøvrigt en fremragende løsning)
Avatar billede sukos Juniormester
30. marts 2005 - 13:27 #30
Jeg er faktsik gået lidt i stå, men den med navnet har fået mig på "ret kurs", så du får lige arne....
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
Computerworld tilbyder specialiserede kurser i database-management

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