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?
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.
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å?