Del PeroMedlem sedan feb. 20003 785 inlägg 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 Det går inte att lösa med en fråga
Del PeroMedlem sedan feb. 20003 785 inlägg 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 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 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 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 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 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! :)