Kan någon ge mig vägledning hur jag ska forumlera min fråga för att få fram högsta poängen för varje "user" med tillhörande information (se förutsättningar och önskat resultat nedan) Om du klarar dig utan fältet id_start kan du pröva den här: Tyvärr klarar jag mig inte utan det fältet. Annars hade det inte varit några problem att lösa frågan på egen hand. Fler förslag? Tja, det går att köra flera frågor: Hej! Eftersom han har version 4.0.21 kan han inte köra med en nästlad fråga (subquery). Stöd för sådana kom i version 4.1.x. Har fått förslag på en lösning som verkar fungera. Menar du min lösning ovan eller har du fått en från annat håll? Det skulle i så fall vara intressant att se den. <code> I princip precis samma sak som jag gör med två satser. Är litet osäker på vilket som är snabbast, men misstänker (inte bara av egoskäl ;-) att min är snabbast. Pröva gärna båda.Hämta högsta värdet / användare
Databas: MySQL
Tabell: user
id_user name comment mm mm mm
(int) varchar varchar
1 Person1 bla bla
2 Person2 bla bla
3 Person3 bla bla
4 Person4 bla bla
Tabell: user_start
id_user id_start score
(int) (int) (int)
1 1 500
1 2 656
2 1 null
2 4 613
3 2 518
3 3 624
3 6 575
4 2 668
4 3 525
Jag vill alltså ha hjälp med en fråga som kan ge mig svaret
id_user Name Comment id_start score
1 Person1 bla bla 2 656
2 Person2 bla bla 4 613
3 Person3 bla bla 3 624
4 Person4 bla bla 2 668Sv: Hämta högsta värdet / användare
CREATE TEMPORARY TABLE temp
SELECT user.id_user, user.name, user.comment, MAX(user_start.score) AS max_score
FROM user
LEFT JOIN user_start
USING (id_user)
ORDER BY user.id_user ASC
Sv: Hämta högsta värdet / användare
Sv: Hämta högsta värdet / användare
CREATE TEMPORARY TABLE temp
SELECT user.id_user, MAX(user_start.score) AS max_score
FROM user
INNER JOIN user_start
USING (id_user)
ORDER BY user.id_user ASC
SELECT *
FROM user
LEFT JOIN temp ON user.id_user = temp.id_user
INNER JOIN user_start ON temp.id_user = user_start.id_user AND temp.max_score = user_start.score
ORDER BY id_user
Sv: Hämta högsta värdet / användare
Som vanligt så har jag inte fått in "standard"-syntaxen, med här kommer ett
förslag med "Oracle"-syntax som du kanske kan översätta.
select user.id_user, user.name, user.comment, user_start.id_start, user_start.score
from user, user_start
where user.id_user = user_start.id_user
and score = (select max(us2.score) from user_start us2 where us2.user_id = user.id_user)
/UffeSv: Hämta högsta värdet / användare
Sv: Hämta högsta värdet / användare
Vet dock inte om den är optimal men då databasen kommer ha en relativt begränsad mängd data samt att uppskattat antal samtidiga användare också är begränsat så nöjer jag mig med denna lösning.
Tack iaf för visat intresse.Sv: Hämta högsta värdet / användare
Sv: Hämta högsta värdet / användare
select u.id_user
,name
,comment
,us1.id_start
,us1.score
from user u
join user_start us1 on u.id_user = us1.id_user
join user_start us2 on us1.id_user = us2.id_user
group by
u.id_user
,name
,comment
,us1.id_start
,us1.score
having us1.score = max(us2.score)
</code>Sv: Hämta högsta värdet / användare