webForumDet fria alternativet
Logga in / Bli medlem

unika poster

Databaser & SQL

10 svar · 276 visningar · startad av K@llen

Medlem sedan mars 20032 667 inlägg
Trådstart#1

Hej,

Jag vill ha ut unikt intArtikelSerial sorterade efter när en artikel kommenterades senast. Har testat DISTINCT, samt att gruppera på samtliga fält i selectlistan. I min enfald trodde jag att den feta raden i koden skulle fixa saken eftersom endast en post kan stämma överens med det villkoret.

Hur fasiken gör man?

SELECT a.intArtikelSerial, a.intArtikelId, a.intKatId, a.strArtikelRubrik  
FROM artikel a 
INNER JOIN artikel_comment ac
ON ( a.intArtikelId = ac.intArtSerieId ) 	   
[b]WHERE a.intArtikelSerial = a.intArtikelId [/b] 
ORDER BY ac.dteCommentDate DESC LIMIT 8

dbms: mysql

Medlem sedan mars 20032 667 inlägg
#2

Jag läste detta och blev nu ännu mer förvirrad:
http://www.mysql.com/doc/en/DISTINCT_optimisation.html

Medlem sedan mars 20032 667 inlägg
#3

Hej,

Nu har jag fått ut unika poster. :)

Men jag har fortfarande lite beskymmer. Den sorterar knasigt. Jag vill ha den artikeln som kommenterades senast överst och sedan den näst senaste osv.

SELECT ac.intArtSerieId, a.intArtikelSerial, a.intArtikelId, a.intKatId, a.strArtikelRubrik   
FROM artikel a 
LEFT OUTER JOIN artikel_comment ac
ON ( a.intArtikelId = ac.intArtSerieId )   
WHERE a.intArtikelSerial = a.intArtikelId 
GROUP BY ac.intArtSerieId, a.intArtikelSerial, a.intArtikelId, a.intKatId, a.strArtikelRubrik 
ORDER BY ac.dteCommentDate DESC LIMIT 8
Medlem sedan dec. 200012 464 inlägg
#4

Din fråga är inte entydig och borde egentligen inte godkännas som korrekt.

SELECT ac.intArtSerieId, a.intArtikelSerial, a.intArtikelId, a.intKatId, a.strArtikelRubrik , max(ac.dteCommentDate) as x  
FROM artikel a 
LEFT OUTER JOIN artikel_comment ac
ON ( a.intArtikelId = ac.intArtSerieId )   
WHERE a.intArtikelSerial = a.intArtikelId 
GROUP BY ac.intArtSerieId, a.intArtikelSerial, a.intArtikelId, a.intKatId, a.strArtikelRubrik 
ORDER BY x DESC LIMIT 8
Medlem sedan mars 20032 667 inlägg
#5

LarsG skrev:

Din fråga är inte entydig och borde egentligen inte godkännas som korrekt.

SELECT ac.intArtSerieId, a.intArtikelSerial, a.intArtikelId, a.intKatId, a.strArtikelRubrik , max(ac.dteCommentDate) as x  
FROM artikel a 
LEFT OUTER JOIN artikel_comment ac
ON ( a.intArtikelId = ac.intArtSerieId )   
WHERE a.intArtikelSerial = a.intArtikelId 
GROUP BY ac.intArtSerieId, a.intArtikelSerial, a.intArtikelId, a.intKatId, a.strArtikelRubrik 
ORDER BY x DESC LIMIT 8

Tack, fungerar utmärkt LarsG! :)

Jag provade en sådan variant också, kan man inte sortera efter ordningsnummer i mysql?

Men nu får du även säga B, vad är inte entydigt?

Medlem sedan dec. 200012 464 inlägg
#6

Ett exempel

A B
----
1 1
2 2
1 3

select a from t group by a order by b

I och med att du har group by så får du två poster

A
--
1
2

men vilket värde från B skall användas för sorteringen då A = 1?

1 eller 3? Beroende på vilket värde man skulle välja så blir det olika sortering och det finns inget som säger vilket av de möjliga B-värdena som skall användas.

Medlem sedan mars 20032 667 inlägg
#7

Ahhh. nu hajar jag. :D

Men hur ska man göra så frågan blir 100% korrekt?

Medlem sedan dec. 200012 464 inlägg
#8

Hur då 100% korrekt?

Medlem sedan mars 20032 667 inlägg
#9

LarsG skrev:

Din fråga är inte entydig och borde egentligen inte godkännas som korrekt

LarsG skrev:

Hur då 100% korrekt?

Alltså så att frågan blir entydig och därmed korrekt.

Jag misstänker att det går att göra med saker som mysql-(versionen) inte stödjer, men kan den bli entydíg och korrekt även med denna dbms. I detta avseende borde det väl kvitta om sorteringen sker på ena eller andra fältet/aliaset?

Medlem sedan dec. 200012 464 inlägg
#10

Den fråga som jag skrev är korrekt (och entydig).

Que?

Medlem sedan mars 20032 667 inlägg
#11

Nu när jag läst din förklaring en gång till trillade femöringen ner. Kan man skylla på värmen? :r

LarsG, du ska ha ett stort tack för din hjälpsamhet! :)

373 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
119 ms — deklarationer (db)
116 ms — hämta statistik (db)
133 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)