webForumDet fria alternativet

Omvänd ordning på DISTINCT

10 svar · 340 visningar · startad av Web-Tor

Web-TorMedlem sedan nov. 200013 890 inlägg
#1

Databasen:

button | name
1 | Kalle
1 | Olle
2 | Sven

Frågan:

SELECT DISTINCT button, name FROM Content ORDER BY button

Resultet:
1 | Kalle
2 | Sven

Så långt stämmer allt men nu vill jag ha följande resultat:
1 | Olle
2 | Sven

Hur löser jag det?

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Jag förstår inte hur du kan få det resultat du får med den frågan.

Jag tycker att du borde få alla poster.

@ndersMedlem sedan juni 200032 969 inlägg
#3

Den SQL-fråga du visar borde ge resultatet i din första illustration om tabellens innehåll. gör den inte det?`

Du kan ju alltid lägga till fler sorteringsalternativ i ORDER BY, men jag vet inte riktigt om det hjälper, ty jag förstår inte riktigt problemet. ORDER BY button, name DESC?

Är du säker på att resultatet av frågan blir som du skriver?

Mvh

Web-TorMedlem sedan nov. 200013 890 inlägg
#4

Klart att ni har rätt (vore ju konstigt annars med en SQL-moderator och ett marsvin). :p

SQL-frågan och databasen är betydligt mer kompicerade än det jag visade och jag missade en del när jag skulle förenkla det hela.
Nu har det löst sig i alla fall. :)

jepsOMedlem sedan mars 2001484 inlägg
#5

Får man fråga hur du löste det?

Jag har samma problem med en dagbokstabell där senaste inlägg i respektive dagbok ska visas.

Web-TorMedlem sedan nov. 200013 890 inlägg
#6

Grejen med mitt problem var ju att jag skulle ha ut unika värden ur databasen. Ditt problem borde enkeltt kunna lösas genom att bara ta ut den post som har "högst" datum.

jepsOMedlem sedan mars 2001484 inlägg
#7

Jo, men när jag gör en SELECT DISTINCT på användar-id för dagboken blir denna SELECT felaktigt sorterad.

Detta medför att när jag sedan gör en SELECT ... WHERE anvid = {användar-id} ORDER BY datum DESC (med LIMIT 1 / TOP 1) utifrån den första SELECTen hamnar den listningen i fel ordning, eftersom det är sorteringen i SELECT DISTINCT som avgör.

Nu är det möjligt att jag för den här tråden åt fel håll. Säg åt mig i så fall :).

LarsGMedlem sedan dec. 200012 464 inlägg
#8

jeps0:

Du får nog backa lite för jag begriper ingenting. Distinct har inget med sorteringsordning att göra.

Kan du beskriva vilka tabeller som är inblandade, ge ett exempel på datainnehåll och vilket resultat du vill ha.

jepsOMedlem sedan mars 2001484 inlägg
#9

Okej, jag skriver om inlägget från MySQL-forumet, eftersom det inte blev någe vidare.

Jag har en tabell dagbok i vilken flera personers dagboksinlägg lagras.

Relevanta fält:
id - unika inläggs-id:t
anvid - användar-id, alltså vem som skrivit inlägget
datum

På sidan listadagbocker.php ska alla dagböcker synas med rubriken till det senaste inlägget i respektive dagbok. Listningen ska ske i datumordning med den senast uppdaterade dagboken först.

Exempel:

-----------------------
| id | anvid | datum  |
-----------------------
|  1 |     1 | 030807 |
|  2 |     2 | 030809 |
|  3 |     1 | 030810 |
|  4 |     3 | 030811 |
|  5 |     2 | 030812 |
|  6 |     3 | 030813 |
|  7 |     4 | 030814 |
-----------------------

Ovanstående vill jag ska visas såhär:

-----------------------
| id | anvid | datum  |
-----------------------
|  7 |     4 | 030814 |
|  6 |     3 | 030813 |
|  5 |     2 | 030812 |
|  3 |     1 | 030810 |
-----------------------

Därav DISCTINCT, men jag vet inte om det är rätt väg att gå...

Red: Ooops, fixat nu :).

LarsGMedlem sedan dec. 200012 464 inlägg
#10

Hur går det här ihop? Id 7 finns inte med i ditt exempeldata

Men jag tror att det är detta du vill ha

http://www.mysql.com/doc/en/example-Maximum-column-group-row.html

jepsOMedlem sedan mars 2001484 inlägg
#11

Tack för hjälpen!

Ett tips för andra som har samma problem: Skit i vad som står i själva artikeln. Bland kommentarerna finns en LEFT JOIN-variant som fixar biffen på ett mycket enklare och snyggare sätt. Såhär gjorde jag i alla fall:

SELECT dagbok.*
FROM dagbok LEFT JOIN dagbok AS d2
ON dagbok.anvid = d2.anvid AND dagbok.datum < d2.datum
WHERE d2.anvid IS NULL 
ORDER BY dagbok.datum DESC
134 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)