webForumDet fria alternativet

Select distinct eller?

10 svar · 222 visningar · startad av Mog

MogMedlem sedan nov. 2003255 inlägg
#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 ?

PeeerMedlem sedan mars 20025 362 inlägg
#2
select * from tabell group by k2

?

LarsGMedlem sedan dec. 200012 465 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.

MogMedlem sedan nov. 2003255 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.

LarsGMedlem sedan dec. 200012 465 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.

MogMedlem sedan nov. 2003255 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 ?

LarsGMedlem sedan dec. 200012 465 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.

MogMedlem sedan nov. 2003255 inlägg
#8

Tackar för hjälpen !

MogMedlem sedan nov. 2003255 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?

LarsGMedlem sedan dec. 200012 465 inlägg
#10

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

Läs artikeln som jag länkade till.

MogMedlem sedan nov. 2003255 inlägg
#11

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

Genererad på 373 ms · cache AV · v20260730165559-full.f96bc7eb