webForumDet fria alternativet

Problem med gruppering

7 svar · 301 visningar · startad av Del Pero

Del PeroMedlem sedan feb. 20003 785 inlägg
#1

Jag ska presentera de åtta senaste nyheterna från varje kategori på min förstasida men får det inte att fungera. Antar att det är något problem med grupperingen.

$sql = "
SELECT a.id, a.intro, a.published, a.image, c.name
FROM articles a 
INNER JOIN categories c 
ON a.category = c.id 
WHERE a.public = '1' 
AND a.display = '1' 
AND a.published < " . mktime(date("H"),date("i"),date("s"),date("m"),date("d"),date("Y")) ." 
GROUP BY a.category
ORDER BY a.published DESC 
LIMIT 0,8";

Som det blir nu så visas den artikel med lägst ID (a.id) från varje kategori och inte den senaste.
Kör MySQL 4.0.
Hur? :)

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Det går inte att lösa med en fråga

Del PeroMedlem sedan feb. 20003 785 inlägg
#3

Ajdå...
Hur skulle man lösa det smidigast med två (eller flera?) frågor? Lägga in alla ID i en array varefter man skrivit ut den kategorin och sen kolla om de redan finns där?

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Jag ser två alternativ.

Hämta data med nuvarande villkor och sortera på kategori och datum. Sen så får du i PHO se till att bara visa 8 stycken per kategori.

Hämta alla kaetgorier. Sedan för varje kategori får du skapa en fråga som hämtar de 8 senaste.

Vilken är bäst?

Del PeroMedlem sedan feb. 20003 785 inlägg
#5

Jag är rädd att jag inte var tydlig nog. :r

Såhär vill jag ha det:
Det finns mer än åtta olika nyhetskategorier (i nuläget c:a 15 men det kommer öka med tiden).
Jag vill visa de åtta senaste nyheterna, oavsett kategori, men varje kategori får bara figurera en gång.

LarsGMedlem sedan dec. 200012 464 inlägg
#6

Jaha, det är det du vill. Men då är det bara samma teknik som i gårdagens fråga.

LarsGMedlem sedan dec. 200012 464 inlägg
#7

Så här

SELECT a.id, a.intro, a.published, a.image, c.name
FROM articles a 
INNER JOIN categories c 
ON a.category = c.id 
inner join articles a2 on a.category = a2.category
WHERE a.public = '1' 
AND a.display = '1' 
AND a.published < " . mktime(date("H"),date("i"),date("s"),date("m"),date("d"),date("Y")) ." 
and a2.public = '1' 
AND a2.display = '1' 
AND a2.published < " . mktime(date("H"),date("i"),date("s"),date("m"),date("d"),date("Y")) ." 
GROUP BY a.id, a.intro, a.published, a.image, c.name
having a.id = max(a2.id)
ORDER BY a.published DESC 
LIMIT 0,8

ungefär.

Del PeroMedlem sedan feb. 20003 785 inlägg
#8

Såhär löste jag det:

SELECT a.id, a.intro, a.published, a.image, c.name
FROM articles a 
INNER JOIN categories c 
ON a.category = c.id 
inner join articles a2 on a.category = a2.category
WHERE a.public = '1' 
AND a.display = '1' 
AND a.published < " . mktime(date("H"),date("i"),date("s"),date("m"),date("d"),date("Y")) ." 
and a2.public = '1' 
AND a2.display = '1' 
AND a2.published < " . mktime(date("H"),date("i"),date("s"),date("m"),date("d"),date("Y")) ." 
GROUP BY a.id, a.intro, a.published, a.image, c.name
having a.published = max(a2.published)
ORDER BY a.published DESC 
LIMIT 0,8

Ändrade
having a.id = max(a2.id)
Till
having a.published = max(a2.published)

Återigen, tack! :)

137 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)