webForumDet fria alternativet

söka och sortera med charindex..

5 svar · 231 visningar · startad av mrblonde

mrblondeMedlem sedan aug. 20012 349 inlägg
#1
SET NOCOUNT ON

--Create a temporary table
CREATE TABLE #TempResult
(
	ID int IDENTITY,
	resultid int,
	resultname varchar(100),
	resultbody text,
	resulttypeurl varchar(200),
	resultcssurl varchar(100)
)

-- Insert the rows from tblItems into the temp. table
INSERT INTO #TempResult (resultid,resultname,resultbody,resulttypeurl,resultcssurl)
SELECT textid as resultid, textname as resultname, textbody as resultbody, 
	typeurl as resulttypeurl, cssurl as resultcssurl
FROM tbltext, tbltype, tblcss
WHERE (textbody LIKE '%t%' OR textname LIKE '%t%') AND texttypeid = typeid AND textcssid = cssid 
	AND textbody NOT LIKE '<p>&nbsp;</p>'

INSERT INTO #TempResult (resultid,resultname,resultbody,resulttypeurl,resultcssurl)
SELECT liid as resultid, liname as resultname, libody as resultbody,
	typeurl as resulttypeurl, cssurl as resultcssurl 
FROM tblListItem, tblType, tblCss, tblList
WHERE (libody LIKE '%t%' OR liname LIKE '%t%') AND lilistid = listid AND listitemcssid = cssid AND listitemtypeid = typeid
	AND libody NOT LIKE '<p>&nbsp;</p>'

SELECT resultid,resultname,resultbody,resulttypeurl,resultcssurl
FROM #TempResult
ORDER BY charindex('t',resultbody), charindex('t',resultname), resultname, resultbody

-- Turn NOCOUNT back OFF
SET NOCOUNT OFF

FElmeddelande:
Server: Msg 420, Level 16, State 1, Line 29
The text, ntext, and image data types cannot be used in an ORDER BY clause.

Men om jag gör så här:

SELECT textid as resultid, textname as resultname, textbody as resultbody
FROM tblText WHERE textbody LIKE '%t%'
ORDER BY charindex('t',textbody)

Så går det utmärkt.

Om man nu inte får använda ett "text" fält i en order by (varför man nu inte skulle få det) så fattar jag inte varför jag får göra det i den andra frågan.

btw, om någon har en smartare idé på hur man kan utforma den här sök funktionen så tipsa gärna. (just nu söker den på "t" men det skall ju bytas ut mot en variabel senare.)

------------------
National Blonde Day!
"Yeah, bam, bam, bam, bam, bam. I told 'em not to touch the alarm"

@ndersMedlem sedan juni 200032 969 inlägg
#2

På grund av anledning får man bara inte det. ;)

Man borde dock kunna göra så här:

...order by convert(varchar(100),textfältet)

Det stör mig också en aning att du inte droppar din temptabell innan du sätter tillbaka nocount.

Mvh,

------------------
http://free.webforum.nu/wf/Forum1/HTML/004053.html

mrblondeMedlem sedan aug. 20012 349 inlägg
#3

en fråga till, måste man droppa temptabellen sist?

typ:

drop table [dbo].[#TempResult]
GO

För när jag kör frågan igen så säger den at det redan existerar en #TempResult i databasen..?

Känner mig förvirrad..

------------------
National Blonde Day!
"Yeah, bam, bam, bam, bam, bam. I told 'em not to touch the alarm"

mrblondeMedlem sedan aug. 20012 349 inlägg
#4

så om man skriver

order by charindex('t',convert(varchar(100),resultbody))

så skall det gå...?

men gör den inte charindex på de första 100 tecknen bara då?

Eh.. hur skriver jag min drop? Jag kan inte hitta min temptabell någonstans?

------------------
National Blonde Day!
"Yeah, bam, bam, bam, bam, bam. I told 'em not to touch the alarm"

@ndersMedlem sedan juni 200032 969 inlägg
#5

Jag har inte använt charindex, så jag vet inte vad du försöker göra. Varchar är ju upp till 8k tecken, så du kan ju öka 100 till 8000 om du vill. Men, som sagt, jag förstår inte riktigt vad du gör.

Nej, det är korrekt att du inte hittar din temptabell någonstans.

DROP TABLE #TempResult

------------------
http://free.webforum.nu/wf/Forum1/HTML/004053.html

mrblondeMedlem sedan aug. 20012 349 inlägg
#6

om man tar order by charindex('söktext',fält) så sorterar den resultatet så att den strängen dör sökordet förekommer tidigast i först och så vidare. Vilket är trevligt när man söker (ju tidigare, desto viktigare, eller nått, något skall jag ju sortera på)

Nu funkade det!

Fast den sorterar fel på ett ställe, vilket är underligt.

------------------
National Blonde Day!
"Yeah, bam, bam, bam, bam, bam. I told 'em not to touch the alarm"

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