webForumDet fria alternativet

Hjälp med att skapa en smidigare sql-fråga

ASP

4 svar · 729 visningar · startad av annesophie

Medlem sedan juni 20012 236 inlägg
Frågan#1

Jag behöver hjälp med att göra om en väldigt lång och omständig SQL-fråga.
Antar att jag gör detta på ett riktigt rookie-vis och att det naturligtvis måste finnas ett snyggare och enklare
sätt att få fram informationen.

Frågan hör samman med en fritextsök (i en Access-databas), och tanken är att man söker igenom vissa celler i
en produkttabell efter sökordet.

sql = "SELECT * FROM products WHERE archive = 'NO' AND product LIKE '%"&question&"%' OR ID LIKE '%"&question&"%' OR powerclass LIKE '%"&question&"%' OR type LIKE '%"&question&"%' OR outputs LIKE '%"&question&"%' OR features LIKE '%"&question&"%' OR specification LIKE '%"&question&"%' OR supplier LIKE '%"&question&"%' OR technology LIKE '%"&question&"%' OR applicationArea LIKE '%"&question&"%' ORDER BY product ASC;"

Ett problem...
Nu är det så att det i produkttabellen även finns arkiverade produkter (som absolut inte får visas i ett sökresultat).
I tabellen finns alltså (text)fältet archive som markeras med ett YES eller NO baserat på produktens status.

Skriver jag som ovan så får jag fram även arkiverade produkter i en sökning, trots archive = 'NO'.

Hur katten kortar man ner detta och gör det snyggare samt visar endast produkter som är markerade med NO?

Medlem sedan juni 200032 967 inlägg
#2

Det har att göra med att or är en ganska lös operator.
Villkoret Archive='NO' gäller bara i kombination med product LIKE '%"&question&"%'. Problemet är lätt löst genom att gruppa alla dina or-villkor i sökningen med en parentes:

sql = "SELECT * FROM products WHERE archive = 'NO' AND (product LIKE '%"&question&"%' OR ID LIKE '%"&question&"%' OR powerclass LIKE '%"&question&"%' OR type LIKE '%"&question&"%' OR outputs LIKE '%"&question&"%' OR features LIKE '%"&question&"%' OR specification LIKE '%"&question&"%' OR supplier LIKE '%"&question&"%' OR technology LIKE '%"&question&"%' OR applicationArea LIKE '%"&question&"%') ORDER BY product ASC;"

mvh

edit: korta ner frågan kan bli svårt - men jag hade delat upp den på flera rader så den blir mer lättläst.

Medlem sedan juni 20012 236 inlägg
#3

@nders skrev:

Det har att göra med att or är en ganska lös operator.
Villkoret Archive='NO' gäller bara i kombination med product LIKE '%"&question&"%'. Problemet är lätt löst genom att gruppa alla dina or-villkor i sökningen med en parentes:

sql = "SELECT * FROM products WHERE archive = 'NO' AND (product LIKE '%"&question&"%' OR ID LIKE '%"&question&"%' OR powerclass LIKE '%"&question&"%' OR type LIKE '%"&question&"%' OR outputs LIKE '%"&question&"%' OR features LIKE '%"&question&"%' OR specification LIKE '%"&question&"%' OR supplier LIKE '%"&question&"%' OR technology LIKE '%"&question&"%' OR applicationArea LIKE '%"&question&"%') ORDER BY product ASC;"

mvh

Men vad enkelt det kan vara då...
@nders, jag fortsätter år efter år att vara så tacksam för din hjälp. Utan dig skulle mitt liv vara väldigt mycket mer omständigt. :birp

Kan man skriva en sådan här SQL-fråga på ett smidigare/kortare sätt då?

Medlem sedan juni 200032 967 inlägg
#4

Kan man skriva en sådan här SQL-fråga på ett smidigare/kortare sätt då?

Njae, se min redigering ovan. :)

Medlem sedan juli 20011 129 inlägg
#5

Om du kör SQL Server 2005, så kan du kanske prova detta:
http://technet.microsoft.com/en-us/library/ms142488.aspx

265 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
135 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
134 ms — ändringar (db)