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?
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?
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.
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
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!
377 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91