webForumDet fria alternativet

Select distinct eller?

Databaser & SQLur Databashanterare & SQL

10 svar · 222 visningar · startad av Mog

Medlem sedan nov. 2003266 inlägg
Frågan#1

Jag har en tabell med 8 kolumner där k1 har unika värden.
Jag vill plocka ut alla värden där värdet i k2 bara får förekomma en gång.

Detta funkar förutom att jag inte kommer åt värdena i alla kolumner:

SELECT DISTINCT k2 FROM TABELL

Detta tar med dubletter från k2:

SELECT DISTINCT * FROM TABELL

WHERE och ORDER BY ska läggas till fast jag tyckte det var irrellevant i sammanhanget.
Någon som kan och vill hjälpa ?

Medlem sedan mars 20025 907 inlägg
#2
select * from tabell group by k2

?

Medlem sedan dec. 200012 464 inlägg
#3

Om din data ser ut så här

K2 K3
-------
1 2
1 3

Vilket värde vill du ha från K3, K4 etc?

Flyttas från Mysql.

Medlem sedan nov. 2003266 inlägg
#4

Peeer skrev:

select * from tabell group by k2

?

Funkar inte, får ändå ut dubletter från k2.
RED / Var lite snabb där, det funkar fast jag får inte ut det senaste, order by funkar inte alltså.

LarsG skrev:

Om din data ser ut så här

K2 K3
-------
1 2
1 3

Vilket värde vill du ha från K3, K4 etc?

Det senaste, en av kolumnerna är datum/tid.

Medlem sedan dec. 200012 464 inlägg
#5
select k2,max(k3) 
from t
group by k2

Det fungerar men om du däremot vill ha ut de andra kolumnerna som finns där k3 har max-värde så går det inte med en fråga i Mysql

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

Även om det som Peeer skrev är tillåtet i Mysql (vilket det absolut inte borde vara) så är det inget man skall anväda då det ger oförutsägbara resultat.

Medlem sedan nov. 2003266 inlägg
#6

Jo det funkar, nästan, groda av mig, det var inte datatypen datum/tid på kolumnen utan varchar som innehåller en datumsträng som ser ut så här: 2004-01-19 02:07.
Går det att fixa till det med SQL eller måste jag byta datatypen ?

Medlem sedan dec. 200012 464 inlägg
#7

Att du har varchar istället för datum borde inte ha någon betydelse i just detta fall om du är konsekvent med avseende på formatet. Jag tycker ändå att du skulle byta datatyp.

Medlem sedan nov. 2003266 inlägg
#8

Tackar för hjälpen !

Medlem sedan nov. 2003266 inlägg
#9

Öppnar denna tråden igen för jag får inte ihop det :(
Tar det från början och mer specifikt.
Det är en sökfunktion jag håller på med.

Tabellen ser ut så här:

answer_id thread_id   postdate(varchar)       x   y   z
     1       1        2004-01-18 21:39
     2       2        2004-01-18 22:04
     3       3        2004-01-18 23:40
     4       1        2004-01-19 02:07
     5       2        2004-01-19 06:28

Där x y z representerar rubrik, författare osv med värden jag vill kunna skriva ut.

Kör jag denna frågan:

SELECT answer_id,thread_id,postdate,x,y,z,MAX(postdate)
FROM answers
WHERE headline LIKE '%".$_POST['stext']."%' OR content LIKE '%".$_POST['stext']."%'
GROUP BY thread_id

Söktexten hittas i answer_id 1 och 4 fast det är 1 som returneras när det är 4 jag vill ha.
Har testat med datetime som datatyp för postdate och det blev ingen skillnad.

Vad är det för fel?

Medlem sedan dec. 200012 464 inlägg
#10

Det är just det problemet som jag avsåg med ofrutsägbara resultat.

Läs artikeln som jag länkade till.

Medlem sedan nov. 2003266 inlägg
#11

Jag blir tyvärr inte mycket klokare av det.
Har testat ett par avsnitt av deras exempel och nej......

133 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)