webForumDet fria alternativet

Kolla om flera kolumner innehåller ett värde...

Databaser & SQL

8 svar · 335 visningar · startad av oskars

Medlem sedan nov. 20051 317 inlägg
Frågan#1

Hej, nu vet jag inte om jag formulerat rubriken rätt... men vi testar ändå!

Jag vill göra något sånt här:

SELECT * From minTabell WHERE fld1 AND fld2 AND fld3 LIKE '%Stockholm%'

Med andra ord vill jag välja dom posterna som har ordet "Stockholm" i något av de valda fälten!

Hur gör man detta?

Medlem sedan nov. 20051 317 inlägg
#2

Har tänkt lite...

SELECT * From minTabell WHERE fld1 LIKE '%Stockholm%' OR fld2 LIKE '%Stockholm%'

Är det så enkelt? :r

För att utveckla det lite...

Hur kan jag få reda på vilken kolumn den hittade ordet "Stockholm" i?... vill bara skriva ut just den kolumnen!

Medlem sedan juni 200032 967 inlägg
#3

Är det så enkelt?

Tja, or betyder ju eller, så i det här fallet passar ju det ypperligt att ha mellan villkoren. Glöm bara inte bort parenteserna när du lägger till and-villkor i where-satsen.

Hur kan jag få reda på vilken kolumn den hittade ordet "Stockholm" i?... vill bara skriva ut just den kolumnen!

Vad lagrar du i de olika kolumnerna?

Medlem sedan nov. 20051 317 inlägg
#4

Text, bara text... :)

Har "löst" det så här... vill dock helst inte att det ska se ut så ;) men det är så här funktionen ska funka i alla fall! Men lite väl ful kod kanske!

<%
	getDatabase = "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=; DATABASE=; UID=;PASSWORD=;OPTION=3"

	Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open = getDatabase

	Set Recset = Server.CreateObject("ADODB.Recordset")
	SQL = "Select * From Arkiv WHERE Produkt1 LIKE '%Öl%' OR Produkt2 LIKE '%Öl%' OR Produkt3 LIKE '%Öl%' OR Produkt4 LIKE '%Öl%' OR Produkt5 LIKE '%Öl%' OR Produkt6 LIKE '%Öl%' ORDER BY Orderdatum asc"
	RecSet.Open SQL, Connect, 1, 2
	
	If RecSet.EOF Then
		Response.Write("Tomt!")
	Else
	
	Do Until RecSet.EOF
	
	%>
		<%=FormatDateTime(RecSet("Orderdatum"),2)%>:
		
	<%
		If Instr(Recset("Produkt1"),"Öl") Then
			Response.Write(""&RecSet("produkt1")&"")
			End If
			If Instr(Recset("Produkt2"),"Öl") Then
			Response.Write(""&RecSet("produkt2")&"")
			End If
			If Instr(Recset("Produkt3"),"Öl") Then
			Response.Write(""&RecSet("produkt3")&"")
			End If
			If Instr(Recset("Produkt4"),"Öl") Then
			Response.Write(""&RecSet("produkt4")&"")
			End If
			If Instr(Recset("Produkt5"),"Öl") Then
			Response.Write(""&RecSet("produkt5")&"")
			End If
			If Instr(Recset("Produkt6"),"Öl") Then
			Response.Write(""&RecSet("produkt6")&"")
			End If
	
	RecSet.MoveNext
	Loop
	End If

%>
Medlem sedan juni 200032 967 inlägg
#5

Text, bara text...

Ja just det, där var vi tillbaka vid den dåliga datamodellen. Nu straffas du för att du lagrar produkter på bredden istället för som egna poster i en egen tabell.

Medlem sedan nov. 20051 317 inlägg
#6

Men asså, det är inte som en webshop där kunderna kan lägga saker i en varukorg...

det är som att fylla i ett papper med ett visst antal fält... Det kommer aldrig behövas fler fält än högst 8st... därför kör vi med 6st :)

Medlem sedan juni 200032 967 inlägg
#7

Om man nu vill begränsa sig på det sättet med en dålig datamodell så får man också räkna med att få göra vissa saker på fel sätt, skriva onödig kod, osv. :)

Medlem sedan nov. 20051 317 inlägg
#8

:(

Vet inte riktigt hur jag ska göra annars... hur som helst... får göra så här... Tack för råden :)

Medlem sedan jan. 20023 327 inlägg
#9

oskars skrev:

:(

Vet inte riktigt hur jag ska göra annars... hur som helst... får göra så här... Tack för råden :)

Du kanske skulle ta dig en funderare på att designa om din databas helt enkelt? Om det är möjligt dvs? Har du en dåligt designad datamodell så blir det inte heller enkelt att manipulera den. Att designa en databas handlar mer om än att bara slänga upp lite tabeller och attribut på måfå. Det är viktigt att analysera och modellera för att se hur datan hänger ihop och hur den kan struktureras på ett logiskt och semantiskt sätt.

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