webForumDet fria alternativet

SELECT senaste två, bara en per användare

Databaser & SQL

4 svar · 333 visningar · startad av JonasG

Medlem sedan mars 2001148 inlägg
Frågan#1

Hej!

Får inte helt rätt på det.
Har två tabeller.

BLOGG
id
inlagg
anvandare

och

ANVANDARE
id
fullnamn

Gemensam är alltså blogg.anvandare och anvandare.id

SELECT blogg.*, anvandare.fullnamn, anvandare.id as personId FROM blogg LEFT JOIN anvandare ON blogg.anvandare = anvandare.id GROUP BY blogg.anvandare ORDER BY blogg.id DESC

Fungerar så långt att den bara plockar ett blogginlägg per användare, men inte det senaste. Utan mer "godtyckligt". Jag vill alltså ORDER BY blogg.id innan de två Joinas. Känns som att ORDER BY körs efter att de båda läggs ihop, och att det blir godtyckligt vilket inlägg bland flera som en användare har skrivit, som kommer med.

Kör MySQL, PHP.

Medlem sedan okt. 20041 556 inlägg
#2

Varför har du med GROUP BY?
Jag skulle köra med inner join i detta fall.

SELECT blogg.id,blogg.inlagg, anvandare.fullnamn, anvandare.id as personId 
FROM blogg 
INNER JOIN anvandare ON blogg.anvandare = anvandare.id
ORDER BY blogg.id DESC
Medlem sedan mars 2001148 inlägg
#3

Jag behöver ha GROUP BY, eller något annat som löser samma problem, för att jag bara vill ha ett inlägg per användare. Alltså bara det inlägg som har högst ID från varje användare.

Medlem sedan dec. 200012 464 inlägg
#4
SELECT b.id, b.inlagg, a.fullnamn, a.id as personId 
FROM blogg b
INNER JOIN anvandare a ON b.anvandare = a.id
where b.id in
  (select max(id)
     from blogg bl
    where bl.anvandare = b.anvandare)
ORDER BY b.id DESC
Medlem sedan mars 2001148 inlägg
#5

ah. verkar smart. men subqueries funkar bara från 4.1 va? tyvärr har mitt webbhotell bara 4.0.nånting. ska se om de vill uppgradera.

255 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)