Det ses tydligen som fullt normalt av vissa, men smått underligt av andra att drömma SQL-kommandon. Nu drömde jag väl egentligen inte, men igår när jag skulle somna så lixom kom det till mig. DISTINCT
! Det skulle ju lösa alla mina problem. Sömndrucken klottrade jag ner en SQL-sats (jag hade ett block bredvid sängen! Tror aldrig det har hänt förut) och försökte somna vidare. Det gick inget vidare.
Idag försökte jag på lunchen använda mina “uppdrömda” koder. Det gick inte heller något vidare. DISTINCT
beter sig inte alls som jag vill. Den kräver att hela raden ska vara likadan för att ignorera förekomst två. När lunchen var slut satt jag med följande kodsnutt, och den spottade inte alls ur sig rätt saker.
$sql="SELECT ".$prefix."term_relationships.term_taxonomy_id AS cat, ".$prefix."posts.post_date as date
FROM ".$prefix."posts
INNER JOIN ".$prefix."term_relationships
ON ".$prefix."term_relationships.object_id = ".$prefix."posts.ID
WHERE post_status='publish' and post_type='post'
ORDER BY ".$prefix."posts.post_date DESC
LIMIT 0, 5";
Resultatet såg ut såhär.
cat | date |
---|---|
10 | 2011-06-27 11:27:12 |
105 | 2011-06-27 11:27:12 |
6 | 2011-05-30 16:46:18 |
10 | 2011-05-30 16:46:18 |
104 | 2011-05-30 16:46:18 |
Notera att nr 10 kommer under cat två gånger för att datumet inte är detsamma på båda. Skitdumt. Jag ville att det skulle se ut ungefär såhär:
cat | date |
---|---|
10 | 2011-06-27 11:27:12 |
105 | 2011-06-27 11:27:12 |
6 | 2011-05-30 16:46:18 |
104 | 2011-05-30 16:46:18 |
?? | ???? |
Med en rad till istället för cat=10 en gång till… GROUP BY
strulade bara till allt genom att sortera mysko. Jag hittade en forumtråd där en person verkade ha precis samma problem, men de valde att lösa allt med fulkod. *morr*
Men så plötsligt slog det mig att jag ville ju ha det senaste datumet bara. Det senaste datumet är högst. MAX
plockar ju fram det högsta numret. *Lycka*
Nu ser koden ut såhär (ja, det kom till en del för att få med rätt saker).
$sql="SELECT ".$prefix."term_taxonomy.term_id AS cat, MAX(".$prefix."posts.post_date) as date, MAX(".$prefix."posts.ID) as ID, ".$prefix."term_taxonomy.taxonomy
FROM ".$prefix."posts
INNER JOIN ".$prefix."term_relationships
ON ".$prefix."term_relationships.object_id = ".$prefix."posts.ID
INNER JOIN ".$prefix."term_taxonomy
ON ".$prefix."term_taxonomy.term_taxonomy_id=".$prefix."term_relationships.term_taxonomy_id
WHERE post_status='publish' AND post_type='post' AND ".$prefix."term_taxonomy.taxonomy='category'
GROUP BY cat
ORDER BY date DESC
LIMIT 0, $nr";
…och resultatet är att de 8 senaste kategorierna jag har postat i visas i flikarna nedanför titeln på denna blogg. Fort går det också, till skillnad från de färdiga funktioner för liknande upptåg jag hittade i WordPress-codex. Kanske letade jag bara dåligt, men nu fungerar det i alla fall. Jag är bäst! =)
Kan man göra det i SQL så bör man göra det i SQL. I alla fall om det är att hämta, räkna och sortera. SQL är alltid snabbare(med väldigt väldigt få undantag).
Ja, det var därför jag kallade den andra lösningen “fulkod”… =)
Vad bra att jag bloggar om saker! Hoppas MIN funkar lika bra som MAX… http://t.co/zSyGPToV #SQL
Nu var det sådär bra att jag hade skrivit den här igen: SQL – svårt till MAX tydligen | Sanningen som jag ser den http://t.co/bW85EjiJ