SQL – svårt till MAX tydligen

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.
image
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! =)

4 reaktioner på ”SQL – svårt till MAX tydligen”

  1. 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).

  2. Pingback: Johanna Julén
  3. Pingback: Johanna Julén

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *