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
16 svar · 476 visningar · startad av ulsy
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
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();
Tack, men går det inte att lösa direkt i frågan?
Vad menar du med sista? Det finns inget sådant begrepp i en relationsdatabas.
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 :)
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,
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.
:)
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
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
Hur ser din kod ut?
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.
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.
Jag vill kunna se vilken post som senast blev registrerad.
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..
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?
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
Det verkar smart Matte, testar detta senare. Tack!