Forum > Webbutveckling relaterat > Databaser och SQL
Hejsan...
tror jag är rätt trött nu... men får inte en simple grej att funka... :S
om jag har en tabell som ser ut på detta vis;
--user--
namn intressen år
Jakob 1539 1984
Jonas 1599 1984
Sara 59 1984
Emma 624 1984
nu vill via ett forumär kunna bocka för alla som har "intresse" [X] 1 och [X] 5 och sedan är det bara dem som ska visas... hur gör jag detta... jag försökte lösa det genom:
mSQL = "SELECT COUNT(*) as CountUser FROM user WHERE year(birth) >= 1984"
If Request.Form("y1") <> "" Then
mSQL = mSQL + " AND intressen LIKE '1'"
End If
If Request.Form("y2") <> "" Then
mSQL = mSQL + " AND intressen LIKE '2'"
End If
If Request.Form("y3") <> "" Then
mSQL = mSQL + " AND intressen LIKE '5'"
End If
på detta vis får jag endast ut jakob och jonas (vilket är förstårligt, eftersom det är bara dem som har 1 & 5), men jag skulle även vilja få fram sara som har "5", jag kan häller inte skriva på detta vis:
mSQL = "SELECT COUNT(*) as CountUser FROM user WHERE year(birth) >= 1984"
If Request.Form("y1") <> "" Then
mSQL = mSQL + " OR intressen LIKE '1'"
End If
If Request.Form("y2") <> "" Then
mSQL = mSQL + " OR intressen LIKE '2'"
End If
If Request.Form("y3") <> "" Then
mSQL = mSQL + " OR intressen LIKE '5'"
End If
så får jag fram alla.. (vilket oxå är förstårligt) :S
så till min fråga... hur får jag fram, jabok, jonas och sara
If Request.Form("y1") <> "" Then
mSQL = mSQL + " OR work LIKE '"1"'"
End If
If Request.Form("y2") <> "" Then
mSQL = mSQL + " OR work LIKE '"2"'"
End If
If Request.Form("y3") <> "" Then
mSQL = mSQL + " OR work LIKE '"5"'"
End IfOch även:
mSQL = "SELECT COUNT(*) as CountUser FROM user WHERE year(birth) >= 1984
Skaffa ett program/editor som färgar kod, för det verka som du har svårigheter när det gäller sträng uppbyggnader:
mSQL = "SELECT COUNT(*) as CountUser FROM user WHERE year(birth) >= 1984"
If Request.Form("y1") <> "" Then
mSQL = mSQL + " AND work LIKE '1'"
End If
If Request.Form("y2") <> "" Then
mSQL = mSQL + " AND work LIKE '2'"
End If
If Request.Form("y3") <> "" Then
mSQL = mSQL + " AND work LIKE '5'"
End If
Upptäcker också att du kör med "+" för att bygga ihop strängar, vilket inte stämmer i Klassisk ASP eller i VB.NET
ok, kolla nu på inlägget ovan, har ändrat koden så den passar in... work var en 4:e column som inte skulle hamna med...
men det kan ju inte heller vara OR, eftersom då visar den ALLA :(
mSQL = "SELECT COUNT(*) as CountUser FROM user WHERE year(birth) >= 1984"
If Request.Form("y1") <> "" Then
mSQL = mSQL + " OR work LIKE '1'"
End If
If Request.Form("y2") <> "" Then
mSQL = mSQL + " OR work LIKE '2'"
End If
If Request.Form("y3") <> "" Then
mSQL = mSQL + " OR work LIKE '5'"
End If
Du kan ju inte köra OR på det sättet, då är det där födelsedagen är 1984 ELLER Work =1 ELLER work är 2 eller 3. Du måste läsa din SQL fråga om vad den gör om det inträffar något. Så din kod gör rätt, men inte det du är ute efter, du få ha en flagga som se om y1, y2 eller y3 har kört minst en gång för du vill ha att frågan skall se ut något i stil med:
SELECT COUNT(*) as CountUser FROM user WHERE year(birth) >= 1984 and work ='1' or work='2'
Function iif(statement, trueMethod, falseMethod)
If statement Then
iif = trueMethod
Else
iif = falseMetod
End If
End Function
dim bExtraQuery
mSQL = "SELECT COUNT(*) as CountUser FROM user WHERE year(birth) >= 1984"
If Request.Form("y1") <> "" Then
mSQL = mSQL & "AND work LIKE '1'"
bExtraQuery = True
End If
If Request.Form("y2") <> "" Then
mSQL = mSQL & iif(bExtraQuery," OR", " AND") & " work LIKE '2'"
bExtraQuery = True
End If
If Request.Form("y3") <> "" Then
mSQL = mSQL & iif(bExtraQuery," OR", " AND") & " work LIKE '5'"
bExtraQuery = True
End If
nej jag tog ju bort work från första inlägget, det är den som är korrekt.. det ska vara "intressen" där och inte "work"
Ok, fortfarande min kod borde stämma med det du är ute efter, nu skall jag ge dig ett tips till framtiden, blanda ALDRIG språk när du utvecklar
Svenska och engelska i dina tabeller (referera till ditt andra inlägg du skrev ungefär samtidigt), du gör dig själv en jätte tjänst att köra ett språk som är globalt, svenskar i utveckling passar verkligen inte in, är fruktansvärt fult att köra blandningar i tabellstrukturer, känns jätte oseriöst och inte genomtänkt databas design.
Ok, fortfarande min kod borde stämma med det du är ute efter, nu skall jag ge dig ett tips till framtiden, blanda ALDRIG språk när du utvecklar
Svenska och engelska i dina tabeller (referera till ditt andra inlägg du skrev ungefär samtidigt), du gör dig själv en jätte tjänst att köra ett språk som är globalt, svenskar i utveckling passar verkligen inte in, är fruktansvärt fult att köra blandningar i tabellstrukturer, känns jätte oseriöst och inte genomtänkt databas design.
ok nu körde jag koden som du sa, men får fortfarande fel :S
det funka bra sålänge 1:a bocken är bockad... dvs bockar jag 1:an och 3:an funkar det bra.. ;) men bockar jag tex 2:an och 3:an funkar det inte heller inte om jag bockar endast 2:an...
bockar jag tex bara in 2:an får jag en SQL query som ser ut på detta viset (den saknar 'AND')
SELECT COUNT(*) as CountUser FROM user WHERE year(birth) >= 1984 intressen LIKE '2'
hmm det verkar som om den retunerar "" vid bExtraQuery = false :S
ahaa.. ser nu att du hade råkat stava fel på method ;)
Jag har ingen metod, jag har en funktion, vilket du har rätt:
Function iif(statement, trueMethod, falseMethod)
If statement Then
iif = trueMethod
Else
iif = falseMethod
End If
End Function
Du skall nog köra med "%" i dina like frågor med.