webForumDet fria alternativet

Filtrera bort rader som innehåller ett visst tecken

Databaser & SQL

2 svar · 550 visningar · startad av inspiro

Medlem sedan sep. 2005673 inlägg
Frågan#1

Har en tabell vars innehåll ser ut typ så här:

1
1.1
1.2
1.3
1.3.1
2
2.1
2.2
2.2.1

osv...

Hur gör man för att hämta ut bara de rader som har hela tal? Jag gör så här:

WHERE (CategoryID NOT LIKE '%.%')

vilket fungerar, men ni har lärt mig tidigare att man inte ska använda procent i början eftersom det är långsamt. Finns det något alternativ?

Fråga 2: Hur skulle man hämta ut alla rader som börjar på exempelvis 2 men som inte har två punkter? Alltså hämta ut 2.1 och 2.2 i mitt exempel?

Medlem sedan dec. 19996 721 inlägg
#2

Fråga 1:

Det finns andra sätt, men de kommer alla att lida av att kolumnens data måste läsas, i stället för en snabb titt i ett index, så LIKE-sökningen är helt OK.

Fråga 2:

Djupet på nivån kan beräknas på flera sätt. Enklast är förstås djup=LEN(Fältet)-LEN(REPLACE(Fältet,'.','')). Om du har en DMBS som stöder triggers kan du uppdatera en djup-kolumn automatiskt vid INSERT och UPDATE, och slipper prestandaproblem. Detta kan ju med fördel användas även för Fråga 1.

Medlem sedan juni 20034 013 inlägg
#3

Jag skulle rekommendera (eller läs: så gjorde jag själv när jag var i din situation) att du ger varje rad ett id och ett parentID som pekar på det id den hör till. Alltså:

"1" blir id=1 och parentID=0
"1.1" blir id=2 och parentID=1
"1.2" blir id=3 och parentID=1
"1.3" blir id=4 och parentID=1
"1.3.1" blir id=5 och parentID=4
"2" blir id=6 och parentID=0
"2.1" blir id=7 och parentID=6
osv...

I så fall, fråga 1:

SELECT * FROM tabellen WHERE parentID = 0;

Fråga 2 är lätt om du vet id:t, annars om din databas stödjer nästlade frågor borde det bli (har aldrig använt såna själv) SELECT * FROM tabellen WHERE parentID = (SELECT id FROM tabellen WHERE kolumn = '2');

260 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)