Avatar billede jensgram Nybegynder
15. juli 2003 - 13:00 Der er 16 kommentarer og
2 løsninger

Hent nyeste data for HVER person!

Hej eksperter

Jeg har følgende tabel:

CREATE TABLE elever (
  id int(5) NOT NULL auto_increment,
  elev tinyint(2) NOT NULL default '0',
  tidspunkt datetime NOT NULL default '0000-00-00 00:00:00',
  navn varchar(255) NOT NULL default '',
  PRIMARY KEY  (id),
)

Hver elev har et elev-id (elev), da der kan være dubletter.
Når data for en elev opdateres sker det bare med INSERT, da jeg vil beholde de gamle data. Nu vil jeg hente de NYESTE data for HVER elev. Jeg har prøvet:

SELECT elev, navn, tidspunkt FROM elever GROUP by elev ASC ORDER by tidspunkt DESC

men det hjælper ikke.

Hvilken SQL skal jeg bruge for at de NYESTE data for HVER elev?

Altså:

elev | navn | tidspunkt
-----------------------
1 | Knud-Ib | 2001-05-08 15:56:15
2 | Bjarne | 2003-01-01 20:00:01

osv...

Det skal kun ordnes således, at elev er fortløbende.

På forhånd tak.
Avatar billede ahv Nybegynder
15. juli 2003 - 13:02 #1
SELECT elev, navn, tidspunkt FROM elever ORDER BY elev DESC LIMIT 1
Avatar billede ahv Nybegynder
15. juli 2003 - 13:03 #2
Aah fpr hver elev ja da flot Alexander ;o)
Avatar billede ahv Nybegynder
15. juli 2003 - 13:05 #3
Lad os prøve med denne så ->

mysql_query("SELECT MAX(tidspunkt) msort, elev, navn, tidspunkt FROM elever GROUP BY elev ORDER BY msort DESC");
Avatar billede jensgram Nybegynder
15. juli 2003 - 13:41 #4
Nej, den virker heller ikke efter hensigten (du havde lige glemt et 'AS')

Hvis jeg indsætter et nyt navn ved et eksisterende elv-id (laver en ny række) er det stadig det gamle navn (dog det nyeste tidspunkt)...
Avatar billede ahv Nybegynder
15. juli 2003 - 13:54 #5
Næh havde ikke glemt noget AS :o) Den burde virke som jeg skrev den. Hmm, sært kan du prøve at illustrer det problem min kode giver?
Avatar billede jensgram Nybegynder
15. juli 2003 - 14:58 #6
Jo, det er da sådan her:

mysql_query("SELECT MAX(tidspunkt) AS msort, elev, navn, tidspunkt FROM elever GROUP BY elev ORDER BY msort DESC");

Ellers kan du da ikke sortere efter det! Er msort da et reserveret ord?
Avatar billede detox Nybegynder
15. juli 2003 - 14:58 #7
Kan du ikke bruge den sådan:
SELECT elev, navn, tidspunkt FROM elever
GROUP BY elev ORDER  BY elev, tidspunkt DESC
Avatar billede ahv Nybegynder
15. juli 2003 - 15:02 #8
Mr Intet navn ;o) Hvis du er så klog hvorfor laver du det så ikke selv? Istedet for at diskutere en sådan ting?

Man kan fint skrive ->

SELECT MAX(tidspunkt) msort, elev, navn, tidspunkt FROM elever GROUP BY elev ORDER BY msort DESC
Avatar billede jensgram Nybegynder
15. juli 2003 - 15:14 #9
ahv > Sådan var det slet ikke ment! Jeg sætter pris på dine forslag, men jeg troede at du havde lavet en fejl. Derfor påpegede jeg hvad jeg troede der var galt. Som du ved har alle sprog nogle reserverede ord - i dette tilfælde kunne det jo så være, at det - for mig - manglende 'AS' var udeladt da 'msort' måske er et reserveret ord (ligesom 'for' osv. i PHP). Det er dog ikke tilfældet, men jeg har aldrig før set, at man ikke skulle bruge 'AS' - nu ved jeg så det.
;)
Avatar billede jensgram Nybegynder
15. juli 2003 - 15:15 #10
ahv > Den tager desværre stadig ikke de nyeste navne.

detox - prøver lige din.
Avatar billede ahv Nybegynder
15. juli 2003 - 15:15 #11
Det virker på samme måde både med og uden AS.
Kan du ikke prøve at illustrer den fejl mit eksempel giver
Avatar billede jensgram Nybegynder
15. juli 2003 - 15:17 #12
detox > Heller ikke det virker!


Jeg lavede et andet forsøg (i forbindelse med et forum):

$result = mysql_query("SELECT forum.elev, elever.navn, brugere.brugernavn, forum.tidspunkt, forum.emne, forum.tekst FROM forum, elever, brugere WHERE (forum.id = " . $traad . " OR forum.traad = " . $traad . ") AND brugere.id = forum.uid AND elever.elev = forum.elev GROUP BY forum.id ORDER BY forum.traad ASC, forum.tidspunkt ASC");

Der skrives ganske vist et 'elever.navn', men det er ikke det nyeste. Det er åbenbart ikke så let, som jeg havde håbet...
Avatar billede jensgram Nybegynder
15. juli 2003 - 15:19 #13
Eksempel:

SELECT MAX(tidspunkt) msort, elev, navn, tidspunkt FROM elever GROUP BY elev ORDER BY msort DESC

Ret  Slet  2003-07-15 15:08:54 6 Pedersen 2003-07-12 20:15:58
Ret  Slet  2003-07-12 20:15:58 1 Jensen 2003-07-12 20:15:58
Ret  Slet  2003-07-12 20:15:58 9 Larsen 2003-07-12 20:15:58
Ret  Slet  2003-07-12 20:15:58 2 Holk 2003-07-12 20:15:58
Ret  Slet  2003-07-12 20:15:58 10 Hedelund 2003-07-12 20:15:58
Ret  Slet  2003-07-12 20:15:58 3 Hansen 2003-07-12 20:15:58
Ret  Slet  2003-07-12 20:15:58 11 Bachmann 2003-07-12 20:15:58
Ret  Slet  2003-07-12 20:15:58 4 Lundby 2003-07-12 20:15:58
Ret  Slet  2003-07-12 20:15:58 12 Høgh 2003-07-12 20:15:58
Ret  Slet  2003-07-12 20:15:58 5 Kessel 2003-07-12 20:15:58
Ret  Slet  2003-07-12 20:15:58 13 Sølvsten 2003-07-12 20:15:58
Ret  Slet  2003-07-12 20:15:58 14 Langer 2003-07-12 20:15:58
Ret  Slet  2003-07-12 20:15:58 7 Sørensen 2003-07-12 20:15:58
Ret  Slet  2003-07-12 20:15:58 15 Frederiksen 2003-07-12 20:15:58
Ret  Slet  2003-07-12 20:15:58 8 Solberg 2003-07-12 20:15:58
Avatar billede jensgram Nybegynder
15. juli 2003 - 15:20 #14
Taget direkte fra PMA - som du kan se er datoerne gode nok, men den nyeste 'Pedersen' (2003-07-15 15:08:54) hedder 'NyPedersen'...
Avatar billede ahv Nybegynder
15. juli 2003 - 16:01 #15
Kan jeg ikke få dit dump så jeg kan teste her?
Avatar billede jensgram Nybegynder
15. juli 2003 - 16:59 #16
#
# Struktur dump for tabellen `elever`
#

CREATE TABLE elever (
  id int(5) NOT NULL auto_increment,
  elev tinyint(2) NOT NULL default '0',
  tidspunkt datetime NOT NULL default '0000-00-00 00:00:00',
  navn varchar(255) NOT NULL default '',
  PRIMARY KEY  (id),
  UNIQUE KEY id_2 (id),
  KEY id (id)
) TYPE=MyISAM;

#
# Data dump for tabellen `elever`
#

INSERT INTO elever VALUES (1,1,'2003-07-12 20:15:58','Jensen');
INSERT INTO elever VALUES (2,2,'2003-07-12 20:15:58','Holk');
INSERT INTO elever VALUES (3,3,'2003-07-12 20:15:58','Hansen');
INSERT INTO elever VALUES (4,4,'2003-07-12 20:15:58','Lundby);
INSERT INTO elever VALUES (5,5,'2003-07-12 20:15:58','Kessel');
INSERT INTO elever VALUES (6,6,'2003-07-12 20:15:58','Pedersen');
INSERT INTO elever VALUES (7,7,'2003-07-12 20:15:58','Sørensen');
INSERT INTO elever VALUES (8,8,'2003-07-12 20:15:58','Solberg');
INSERT INTO elever VALUES (9,9,'2003-07-12 20:15:58','Karred');
INSERT INTO elever VALUES (10,10,'2003-07-12 20:15:58','Hedelund');
INSERT INTO elever VALUES (11,11,'2003-07-12 20:15:58','Bachmann');
INSERT INTO elever VALUES (12,12,'2003-07-12 20:15:58','Kirk');
INSERT INTO elever VALUES (13,13,'2003-07-12 20:15:58','Dahl');
INSERT INTO elever VALUES (14,14,'2003-07-12 20:15:58','Langer');
INSERT INTO elever VALUES (15,15,'2003-07-12 20:15:58','Frederiksen');
INSERT INTO elever VALUES (37,6,'2003-07-15 15:08:54','NyPedersen');
INSERT INTO elever VALUES (36,6,'2003-07-15 14:54:46','NogetPedersen');
Avatar billede jensgram Nybegynder
15. juli 2003 - 19:59 #17
Nå, jeg løste problemet ved at gemme navnene i et array (de ændrer sig sikkert ikke alligevel).

ahv > Jeg giver dig lige lidt points som tak for indsatsen!
Avatar billede jensgram Nybegynder
15. juli 2003 - 20:00 #18
Hov, jeg må hellere lave et svar, hvis ikke du skal have det hele ;)
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