13. april 2001 - 00:11Der er
44 kommentarer og 1 løsning
Posten før/efter
Kan det umiddelbart lade sig gøre at få fat i posten der står umiddelbart før (og efter) den post man har fået returneret i en tabel uden en fortløbende id-kolonne? Evt. efter en sortering?
Det, jeg tænker på, er hvis man har en tabel der ser ud som følger:
Jeg har nu lavet en SELECT, der får fat på Pouls kolonne, men jeg vil gerne have fat i Egons og Ibs også. Findes der en nem måde at gøre det på uden at skulle til at implementere en fortløbende id-kolonne?
Det allerbedste ville være hvis hele tabellen kunne blive sorteret først (via ORDER BY). Og altså ikke efter \'udvælgelsen\', da det ikke vil have megen effekt..
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
i eksemplet ovenfor vil der kun være én ved navn Egon, osv (primær nøgle), og jo det ville være bedst hvis der blev sorteret på navn inden de tre (den oprindelige og en på hver side) blev udvalgt
du kan snyde mysql ved at lave to søgninger. En hvor du sorter i stigende og udvælger limit 2 - altså poul og ib. Derefter sorterer du faldene og udvælger 1,1 altso egon tilsidst udskriver du de to søgninger i regtig række følge.
alvion> Jo, det er lige nøjagtig sådan nogle næste/forrige-links ;-)
Problemet er bare at der ikke er en kolonne, med et entydigt id ud over navn.. (ok, det var nok lidt misvisende at lave en cpr-kolonne - i ovenstående eksempel kan personer have samme cpr ;-)
mortenfn> jep, jeg fik den.. Virker den også når nu jeg bruger where navn likes \'Poul\'? Nå, jeg prøver..
$row1 = mysql_fetch_array(mysql_query(\"select id from tabel where name = \'Ib\'\")); $row2 = mysql_fetch_array(mysql_query(\"select id from tabel where name = \'Egon\'\")); $row3 = mysql_fetch_array(mysql_query(\"select name from tabel where id < \'$row2[id]\' and id > \'$row1[id]\'\"));
Jeg tror arrayet er den eneste umiddelbare løsning.. Godt det er en forholdsvis kort tabel alligevel.. mit bud er at den aldrig kommer over 500 poster, så det burde gå an, selvom det vist ikke er dokumenteret i nogen SQL-bog ;-)
underligt? hvorfor? nu var det et tænkt eksempel.. Jeg kan da godt afsløre hvad den rigtige tabel går ud på, men jeg syntes bare at det var nemmere med et konstrueret eksempel frem for at sætte folk ind i den rigtige.. anyway here goes: Tabellen er et indeks over en bestemt tegneserietegners historier. De har alle en unik storycode (som meget vel kan indeholde bogstaver, fx AR103) - det er min primære nøgle, og det eneste man kan \"kende\" en historie på. Det, jeg sorterer på er en dato for historien og derefter storycode\'n. Jeg har så en webside, der præsenterer en enkelt historie, og vil gerne lave en mulighed for at springe direkte til den næste historie. Dvs. den næste storycode efter AR103 godt kan risikere fx at være D90134.. Og da historier ikke nødvendigvis tilføjes sekventielt, kan jeg ikke bruge en id til noget ;-) (og jo, jeg bruger order by)
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.