webForumDet fria alternativet

Få de senast ändrade poster med group by

Databaser & SQL

3 svar · 304 visningar · startad av Rocket

Medlem sedan feb. 2000372 inlägg
Frågan#1

Hej.

Jag sitter och jobbar med att göra ett fotoalbum i PHP och mySQL. Nu håller jag på med några SQL-frågor som ska hämta de senaste ändringarna i fotoalbumet. Bland annat så vill jag visa de senaste bilderna men max en från varje kategori. Det fungerar inte som jag vill när det finns både nya och äldre bilder i samma kategori.

De tabellerna jag använder är:

Bilderna (photoAlbumImages)

id			int
originalFileName  	varchar
width			int
height			int
updated			timestamp

Koppling mellan bilder och kategorier (photoAlbumImgToCat)

id   		int
image  		int
previous  	int
category  	int
updated  	timestamp

Nu har jag följande SQL-fråga:

SELECT
	DATE_FORMAT(photoAlbumImages.updated, '%Y%m%d') AS updated,
	photoAlbumImages.id AS image,
	photoAlbumImgToCat.category AS category,
	max(photoAlbumImages.updated) as x
FROM
	photoAlbumImgToCat
LEFT JOIN
	photoAlbumImages
ON
	photoAlbumImgToCat.image = photoAlbumImages.id
GROUP BY
	photoAlbumImgToCat.category
ORDER BY
	x DESC
LIMIT
	10

Resultatet ger bilder från de 10 kategorierna som har de nyaste bilderna. Problemet är att det inte är de nyaste bilderna som visas utan den första/äldsta bilden ur varje kategori.

Hur ska jag göra för att få den nyaste posten när jag kör GROUP BY?

Medlem sedan dec. 200012 464 inlägg
#2
SELECT DATE_FORMAT(pai.updated, '%Y%m%d') AS updated,
       pai.id AS image,
       pc.category 
FROM photoAlbumImgToCat as pc
JOIN photoAlbumImages as pai ON pc.image = pai.id
where updated in (select max(updated)
  from photoAlbumImages 
  join photoAlbumImgToCat on photoAlbumImgToCat.image = photoAlbumImages.id
 where category = pc.category)
ORDER BY updated DESC
LIMIT 10
Medlem sedan feb. 2000372 inlägg
#3

MySQL versionen som är installerad på servern har inte stöd för inbäddade frågor (heter det så på svenska?). Tips på andra sätt man kan lösa det på eller måste jag göra det i flera olika frågor.?

Medlem sedan dec. 200012 464 inlägg
#4
SELECT DATE_FORMAT(pai.updated, '%Y%m%d') AS updated,
       pai.id AS image,
       pc.category 
FROM photoAlbumImgToCat as pc
JOIN photoAlbumImages as pai ON pc.image = pai.id
JOIN photoAlbumImages as pai2 ON pai.id = pai2.id
group by DATE_FORMAT(pai.updated, '%Y%m%d'),
         pai.id,
         pc.category
having pai.updated = max(pai2.updated)
ORDER BY updated DESC
LIMIT 10
261 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)