03. januar 2005 - 16:03Der er
12 kommentarer og 1 løsning
DISTINCT på en forkortet tekst
SELECT id,spm,dato,CONCAT(LEFT(spm,16),IF(LENGTH(spm)>16,'...','')) AS spm2 FROM forum ORDER BY id DESC LIMIT 2
Som I kan se har jeg forkortet "spm" så jeg kun får maksimum 16 tegn fra den... jeg vil dog også gerne bruge DISTINCT så jeg ikke en med samme spm.... en der kan fixe noget? :)
Distinct virker på ALLE felter på select listen, og da jeg går ud fra at ID er et autonummer vil Distinct ikke have nogen virkning, sålænge at ID'et er med på selecten. Du kan heller ikke tage den fulde udgave af spm med, og sikkert heller ikke dato. Du har derfor kun dette tilbage, hvis du vil bruge distinct.
SELECT distinct CONCAT(LEFT(spm,16),IF(LENGTH(spm)>16,'...','')) AS spm2 FROM forum ORDER BY id DESC LIMIT 2
.... Og det er nok ikke det du er ude efter. Da du sikkert vil have de andre felter med også.
Man kan vel også bare hente de felter man skal bruge og så bruge en anden php-funktion som kan snuppe de første 16 tegn og så en funktion som kan tjekke om der overhovdet er mere end 15 tegn i "spm"-værdien før tager de første 15 tegn og slutter det af med "..." til sidst..
Et lille eksempel til dem der ikke helt forstår det ovenstående :)
nu mangler jeg bare at få min mysql_query til at funke :)
SELECT id,DISTINCT(spm),dato FROM forum ORDER BY id DESC LIMIT 2
kommer med fejl
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT(spm),dato FROM forum ORDER BY id DESC LIMIT 2' at line
Det er netop derfor man ikke altid kan bruge distinct, som man gerne vil. Du kan enten fjerne de kolonner, som driller, fra select listen, eller programmere dig ud af det (hvis man ellers kan).
... Det har nok mere været et tilfælde at det virkede. Ingen af de databaser typer jeg har brugt, kan man bruge distinct på et specifikt element, og lade de andre uberørt. Prøv at se dette eks:
MinTabel ID tekst1 tekst2 1 "hejsa" "test" 2 "hejsa" "ksdf"
Med: "select id, distinct(tekst1), tekst2 from MinTabel" har databasen ingen mlighed for at vide hvilket ID og tekst2 den skal tage med, da begge rækker passer på distinct(tekst1).
Det kan dog laves over flere selects.
$res1 = "select distinct(tekst1) from MinTabel" for($res1......) { £res2 = "select * from MinTabel where tekst1='$res1[0]' limit 1" echo $res2 }
Håber du forstår ideen med den meget korte kode :o)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.