webForumDet fria alternativet

Endast sista posten

16 svar · 476 visningar · startad av ulsy

ulsyMedlem sedan aug. 2002121 inlägg
#1

Hur skriver jag i en fråga för att endast få fram sista inmatade posten?

Troligen lätt för den som vet :OO

DarrenMedlem sedan dec. 2002789 inlägg
#2

Detta var ju en bra fråga... Jag vet hur du kan göra detta genom att kombinera två frågor...

// ta reda på antal rader i tabellen...
$sql = "SELECT COUNT(*) FROM din_tabell";
$query = mysql_query($sql);

$result = mysql_fetch_array($query);
mysql_free_result();

// läs databasen igen med början från sista raden
$sql = "SELECT * FROM din_tabell LIMIT ($result - 1), 10";
$query = mysql_query($sql);

$result_1 = mysql_fetch_array($query);
mysql_free_result();
ulsyMedlem sedan aug. 2002121 inlägg
#3

Tack, men går det inte att lösa direkt i frågan?

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Vad menar du med sista? Det finns inget sådant begrepp i en relationsdatabas.

DarrenMedlem sedan dec. 2002789 inlägg
#5

ulsy skrev:

Tack, men går det inte att lösa direkt i frågan?

Vad jag vet så stödjer inte MySQL (version lägre än 4) sk 'subquerys'... Då blir det ju svårt att få detta att fungera med bara en fråga.

LarsG du om någon bör ju veta hur man skall göra här... Kom med dina tips och trick :)

@ndersMedlem sedan juni 200032 969 inlägg
#6

Så länge man har en räknarkolumn eller datum/tid-fält att sortera på borde det inte vara något problem att få till i en fråga för att få ut den senast inlagda posten.

SELECT * FROM dintabell ORDER BY ID-kolumn DESC LIMIT 1, 1

Mvh,

ulsyMedlem sedan aug. 2002121 inlägg
#7

Jag tror att lösningen finns i @nders svar, men jag har inte testat än.
Vad jag menar LarsG är att jag har en tabell som innehåller bla. en ID-kolumn, jag vill få ut senaste registrerade posten mao. den post som har högst ID.

Hoppas att detta var mer korrekt formulerat och förståeligt.
:)

LarsGMedlem sedan dec. 200012 464 inlägg
#8

jag vill få ut senaste registrerade posten mao. den post som har högst ID.

Det behöver inte vara samma sak. I vissa lägen och beroende på tabelltyp så kan mysql återutnyttja id för poster som har blivit borttagna. Det kan också ske andra insert i samma tabell efter din insert och innan din select.

I mysql finns funktionen

last_insert_id()

som returnerar det id som senast lagrade post fick

q = "insert ..."
connect.execute q,,128
set rs = connect.execute("select last_insert_id()")
newid = rs(0)

Det är det enda säkra sättet att få tag på senaste genererade värdet för en auto_increment kolumn.

Om du vill ha posten med högst id så fungerar @nders kod med en liten modifikation

SELECT * FROM dintabell ORDER BY IDkolumn DESC LIMIT 0, 1

offset startar med 0 och inte 1

ulsyMedlem sedan aug. 2002121 inlägg
#9

Det verkar ju vara det jag letar efter, men hur ser själva frågan ut?
Jag har gjort några försök men endast fått tillbaka massa nollor.

Tacksam för idé på fråga

LarsGMedlem sedan dec. 200012 464 inlägg
#10

Hur ser din kod ut?

ulsyMedlem sedan aug. 2002121 inlägg
#11

Nu ser den ut så här:

SELECT last_insert_id (id-kolumn) FROM tabell

Och då kommer alla id upp i en följd och det är ju inte det jag vill.

LarsGMedlem sedan dec. 200012 464 inlägg
#12

Funktionen last_insert_id fungerar bara direkt efter insert och kan inte användas på det sätt som du har gjort.

Jag förstår inte vad du vill ha för resultat.

ulsyMedlem sedan aug. 2002121 inlägg
#13

Jag vill kunna se vilken post som senast blev registrerad.

preyMedlem sedan jan. 2002341 inlägg
#14

Här är en bra SQL-sats för ändamålet:

"SELECT * FROM tabell ORDER BY id DESC LIMIT 1"

id kan oxå va datum..

ulsyMedlem sedan aug. 2002121 inlägg
#15

Tack Prey!
Men enligt LarsG är det inte säkert att den sist registrerade posten har högst ID och då är frågan hur man fixar detta?

MatteMedlem sedan aug. 20002 975 inlägg
#16

Du måste ha något att sortera efter, lämpligen ett tidsfält av formatet TIMESTAMP eller DATETIME. Kanske har du redan ett sådant, isåfall kan du använda det.

Låt oss kalla tidsfältet för 'time'.

Vill du få fram sista posten som lagts till (insert) eller ändrats (update) så använder du TIMESTAMP. Du ska inte tilldela TIMESTAMP-fältet något värde när du gör dina insert eller update, det fixar TIMESTAMP-fältet själv.

Är det endast när posten lagts till du vill sortera efter så använder du DATETIME. då får du ge fältet värdet now() vid insert.

Sen hämtar du sista post som visats tidigare:

SELECT * FROM dintabell ORDER BY time DESC LIMIT 0, 1
ulsyMedlem sedan aug. 2002121 inlägg
#17

Det verkar smart Matte, testar detta senare. Tack!

144 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)