Avatar billede magic-mouse Novice
23. september 2011 - 07:35 Der er 4 kommentarer og
1 løsning

Fortsat anderledes problem

### Ønsker du ikke den lange forklaring scroll ned til ###


Ok, jeg er så kommet lidt videre med det projekt jeg har startet. Kan nu også gå lidt mere i detaljer med hvad det er som skal laves.

Jeg arbeder på en side for en af mine venner hvor han skal styrer sit raid team til world of warcraft. Derfor skal han have en liste over dimser, forbundet med karakterens specialisering. Derfor findes der 2 tabeller, da en Paladin kan være, {Holy, Protection, og Retribution} på samme tid, dog max 2 hver gang. Dvs. at Karakteren A som er paladin skal kun vises 1 gang (normalt kan distinct klare det), men for både protection, retribution og holy. Årsagen til at jeg ikke bare erstatter hvis den allerede findes er at han gerne vil have en historik over udvilkingen af de forskellige karaktere, så man kan se hvordan de fornyer deres udrustning.

#########

Hvis jeg kører flg. sql på databasen over allerede godt fyldte test subjekter, returnere MAX('timestamp'), korrekt data, men skriver jeg *; 'timestamp', eller ligende kommer informationen som findes i databasen ikke korrekt ud.

SELECT `timestamp`,MAX(`timestamp`) FROM `players_items` GROUP BY `character`,`spec`
LIMIT 0, 10

2011-09-20 15:17:32 - 2011-09-20 15:17:32
2011-09-03 14:44:58 - 2011-09-03 15:40:07 <-- Ikke den samme
2011-09-03 16:02:11 - 2011-09-03 16:02:11
2011-09-03 13:18:58 - 2011-09-03 13:18:58
2011-09-20 20:24:14 - 2011-09-22 12:36:41 <-- Ikke den samme
2011-09-20 15:17:37 - 2011-09-20 15:17:37
2011-09-03 14:43:50 - 2011-09-20 15:17:23 <-- Ikke den samme
2011-09-03 15:41:18 - 2011-09-03 15:41:18
2011-09-20 15:18:55 - 2011-09-20 15:18:55
2011-09-03 13:22:54 - 2011-09-03 13:22:54

Har prøvet med:

SELECT * FROM FROM `players_items` WHERE `timestamp` = (SELECT `timestamp`,MAX(`timestamp`) FROM `players_items` GROUP BY `character`,`spec`)

Men det virker ikke da der er mere end en række som returneres.

Spørgsmålet er hvordan jeg får den linie til at fungere.
Avatar billede JensPeterSvensson Nybegynder
23. september 2011 - 08:19 #1
Hvad med:
SELECT * FROM `players_items` GROUP BY `character`,`spec` ORDER BY `timestamp` DESC LIMIT 0, 10
Avatar billede magic-mouse Novice
23. september 2011 - 10:01 #2
Nej ... som beskrevet her: http://www.eksperten.dk/spm/947613 så giver det også forkert løsning.


Jeg ligger på grænsen til at lave en:
$sql = "(SELECT MAX(`timestamp`) FROM FROM `players_items` GROUP BY `character`,`spec`";

$resource = _db($sql);

for($res = mysql__fetch_array($resource)){
$sql = "(SELECT * FROM FROM `players_items` WHERE `timestamp` = " . $res['max_timestamp'];
}


Synes bare det skulle være muligt at gøre med SQL, måske med en join?
Avatar billede gnoname Praktikant
24. september 2011 - 15:19 #3
SELECT `character`,`spec`,`timestamp`
FROM `players_items` p1
WHERE `timestamp` = (
  SELECT max(`timestamp`)
  FROM  `players_items` p2
  WHERE  p2.`character` = p1.`character`
  AND    p2.`spec` = p1.`spec`)
GROUP BY `character`,`spec`

OBS: du kan godt undlade sidste linie
Avatar billede magic-mouse Novice
28. september 2011 - 10:06 #4
Super pointsne er dine. Læg et svar.
Avatar billede gnoname Praktikant
02. oktober 2011 - 10:30 #5
Det glæder mig du kan bruge svaret.
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