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

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MySQL: At vælge de sidst indkomne poster
Fra : Jonas Koch Bentzen


Dato : 22-01-01 10:36

Hej -

Er der nogen, der ved, om det i MySQL er muligt at vælge alle kolonner
fra de sidste fem indskrevne rækker *uden* at kende kolonnenavnene?
Problemet er jo, at hvis jeg bruger "order by" og "desc", skal der også
smides et kolonnenavn ind dér, og lige netop i det program, jeg står og
skal lave, har jeg ikke kolonnenavnene - og selv hvis jeg havde, ville
det ikke hjælpe mig, for jeg ville i så fald ikke kunne vide, hvilke
kolonnenavne, der ville give mulighed for sortering efter indskrivning.

--
http://jonaskochbentzen.dk/

 
 
Troels Arvin (22-01-2001)
Kommentar
Fra : Troels Arvin


Dato : 22-01-01 17:32

I artikel <m7Ta6.5013$fa3.272376@news010.worldonline.dk>, skrev "Jonas
Koch Bentzen" <ingen.epostadresse@eksempel.dk>:

> Er der nogen, der ved, om det i MySQL er muligt at vælge alle kolonner
> fra de sidste fem indskrevne rækker *uden* at kende kolonnenavnene?

Det kan man ikke i relationelle databaser, fordi det ikke giver mening
at tale om rækkefølge af rækker (tuples) i den relationelle model.

Hvis man vil operere med rækkefølge af poster _skal_ man selv oprette en
den fornødne understøttelse for det. Fx. ved at oprette en
integer-kolonne, som man så også passende kunne gøre til primært index.
I MySQL kunne man også putte "auto_increment" på kolonnen, men det er
ikke umiddelbart portérpart (i andre databasesystemer hedder det
tilsvarende vistnok fx. "sequences").

--
Greetings from Troels Arvin, Copenhagen, Denmark

Jonas Koch Bentzen (22-01-2001)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 22-01-01 22:17

Troels Arvin skrev:

> I artikel <m7Ta6.5013$fa3.272376@news010.worldonline.dk>, skrev "Jonas
> Koch Bentzen" <ingen.epostadresse@eksempel.dk>:
>
>> Er der nogen, der ved, om det i MySQL er muligt at vælge alle
>> kolonner fra de sidste fem indskrevne rækker *uden* at kende
>> kolonnenavnene?
>
> Det kan man ikke i relationelle databaser, fordi det ikke giver mening
> at tale om rækkefølge af rækker (tuples) i den relationelle model.

Men alligevel er det jo sådan, at de er lagret i den rækkefølge, de er
blevet indskrevet i (eller i hvert fald bliver de præsenteret i dén
rækkefølge, når man laver en simpel "select * from tabel"-kommando).

Nå, men jeg fandt en let måde at komme uden om det på:

select count(kolonnenavn) from tabel;

Det giver et tal, som man så kan gemme i variablen $count og bruge på
følgende måde, hvis man vil have de sidste fem rækker:

mysql_query("select * from tabel limit ".($count - 5).", $count");

--
http://jonaskochbentzen.dk/

Peter Brodersen (23-01-2001)
Kommentar
Fra : Peter Brodersen


Dato : 23-01-01 04:59

On Mon, 22 Jan 2001 22:17:24 +0100, Jonas Koch Bentzen
<ingen.epostadresse@eksempel.dk> wrote:

>Det giver et tal, som man så kan gemme i variablen $count og bruge på
>følgende måde, hvis man vil have de sidste fem rækker:
>
>mysql_query("select * from tabel limit ".($count - 5).", $count");

Det er dog ikke at stole på. Du kan ikke på den måde sige "sidste
rækker".

I tilfælde hvor rows fjernes og andre indsættes, kan du sagtens være
ude for en situation, hvor en almindelig select på en tabel uden nogen
order - selv med en tabel med auto_increment - vil resultere i at man
fx får entry 1, 2, 3, 29, 4, 5, 6... ud i den rækkefølge.


--
- Pede
Professionel nørd

Jonas Koch Bentzen (23-01-2001)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 23-01-01 09:19

Peter Brodersen skrev:

> On Mon, 22 Jan 2001 22:17:24 +0100, Jonas Koch Bentzen
> <ingen.epostadresse@eksempel.dk> wrote:
>
>>mysql_query("select * from tabel limit ".($count - 5).", $count");
>
> Det er dog ikke at stole på. Du kan ikke på den måde sige "sidste
> rækker".

Men det er dog det bedste bud. Det er ikke nødvendigt for den
applikation, jeg er ved at lave, at det er helt præcist.

--
http://jonaskochbentzen.dk/

Peter Brodersen (23-01-2001)
Kommentar
Fra : Peter Brodersen


Dato : 23-01-01 09:22

On Tue, 23 Jan 2001 09:18:54 +0100, Jonas Koch Bentzen
<ingen.epostadresse@eksempel.dk> wrote:

>Men det er dog det bedste bud. Det er ikke nødvendigt for den
>applikation, jeg er ved at lave, at det er helt præcist.

Tør man spørge hvad, din applikation går ud på, idet det ikke behøver
at være helt præcist, samt at du ikke kender nogen feltnavne? Og hvis
alt går galt, kan du så ikke describe dig frem til feltnavnet eller
lignende?


--
- Pede
Professionel nørd

Jonas Koch Bentzen (23-01-2001)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 23-01-01 11:19

Peter Brodersen skrev:

> Tør man spørge hvad, din applikation går ud på, idet det ikke behøver
> at være helt præcist, samt at du ikke kender nogen feltnavne? Og hvis
> alt går galt, kan du så ikke describe dig frem til feltnavnet eller
> lignende?

Det er en webbaseret MySQL-klient - lidt a la phpMyAdmin, selv om den
er mere klient end et egentligt administrationsværktøj. En af mine
kollegaer, der bruger Windows, klager tit over, at MySQL-klienten til
Wiindows er for dårlig. Så kommer han over til mit bord og siger: "Kan
du ikke lige åbne KMySQL, så jeg kan se, hvad der er kommet ind i
databasen". Det er begyndt at blive lidt træls for mig, så derfor
tænkte jeg, at jeg ville lave webbaseret MySQL-klient : )

De vigtigste ting, både han og jeg har brug for, er følgende:

1. Hurtig oversigt over tabellernes opbygning.
2. Hurtig oversigt over de sidst indkomne poster.

Det er derfor, jeg har brug for at kunne udskrive de sidst indskrevne
poster. Det skal helst gøres *uden* at brugeren af det webbaserede
system skal indtaste en MySQL-kommando. Straks brugeren vælger en
tabel, skal han/hun se de sidst indkomne poster (ligesom KMySQL viser
hele tabellens indhold, når man klikker på en tabel).

Jo, jeg kender godt kolonnenavnene, for før jeg viser posterne, laver
jeg en "describe tabel" for at kunne vise tabellens opbygning.
Problemet er, at jeg ikke bare kan tage et tilfældigt kolonnenavn og
order by det. Hvis kolonnen f.eks. er et varchar-felt, så vil tabellen
jo blive sorteret alfabetisk efter det felt, hvilket ikke er meningen.

Som sagt: Det er ikke så galt, hvis den ikke altid viser de sidst fem
indkomne rækker præcist, for så kan brugeren altid bare køre en
MySQL-kommando bagefter for at få det rigtige resultat. Hovedsagen er,
at man i de fleste tilfælde vil få det, man ønsker: De sidste fem
indkomne poster.

--
http://jonaskochbentzen.dk/

Lars Petersen (25-01-2001)
Kommentar
Fra : Lars Petersen


Dato : 25-01-01 01:14

Ok jeg hænger mig i petitesser

> >Det giver et tal, som man så kan gemme i variablen $count og bruge på
> >følgende måde, hvis man vil have de sidste fem rækker:

Ok. De sidste fem rækker.

> >mysql_query("select * from tabel limit ".($count - 5).", $count");

Den korrekte syntax er:

select felter from tabel limit offset, amount

Altså:

mysql_query("select * from tabel limit ".($count - 5).", 5");


--
-
Lars
Husk: Hvis du vil maile mig, er der ingen virkelighed i min mail!



Jonas Koch Bentzen (25-01-2001)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 25-01-01 09:33

Lars Petersen skrev:

>> >mysql_query("select * from tabel limit ".($count - 5).", $count");
>
> Den korrekte syntax er:
>
> select felter from tabel limit offset, amount
>
> Altså:
>
> mysql_query("select * from tabel limit ".($count - 5).", 5");

Du har ret. Det var en lille tastefejl.

--
http://jonaskochbentzen.dk/

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408942
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste