I have webapplication where there are 1000 of products so there is multiple filter needs to be there. I have total 4 checkboxList. Now my problem is if I apply filter from any of checkboxList then it checks selected value for all column that is specified in query. What I want is like below
SELECT * FROM products WHERE price_rang IN ('selectedValueFromCheckBoxList1') And category IN ('selectedValueFromCheckBoxList2')
What is happening now
SELECT * FROM `products` WHERE price_range IN ('selectedValueFromCheckBoxList2') AND category IN ('selectedValueFromCheckBoxList2')
So in this query suppose If I select value First from checkboxList2 then for both the columns it takes that value & result not displaying.
Below is my filter process code
Private Sub getResult()
Dim constr As String = ConfigurationManager.ConnectionStrings("conio").ConnectionString
Dim query As String = "select * from products"
Dim condition As String = String.Empty
For Each price As ListItem In priceFilter.Items
condition += If(price.Selected, String.Format("'{0}',", price.Value), String.Empty)
Next
For Each sub_category As ListItem In category.Items
condition += If(sub_category.Selected, String.Format("'{0}',", sub_category.Value), String.Empty)
Next
If Not String.IsNullOrEmpty(condition) Then
condition = String.Format(" WHERE price_range IN ({0}) and sub_category IN ({0})", condition.Substring(0, condition.Length - 1))
End If
Using con As New MySqlConnection(constr)
Using cmd As New MySqlCommand(query & condition)
Using sda As New MySqlDataAdapter(cmd)
cmd.Connection = con
Using dt As New DataTable()
sda.Fill(dt)
products.DataSource = dt
products.DataBind()
End Using
End Using
End Using
End Using
End Sub
This is an option is you're only interested in the checked items.
Public Function buildWhereClause() As String
Dim query As String = "select * from products"
Dim joiner As String = " "
Dim condition As String = String.Empty
Dim priceCondition As String = String.Empty
For i = 0 To priceFilter.Items.Count - 1
If priceFilter.Items(i).Selected Then
Dim price As String = priceFilter.Items(i).ToString
priceCondition = String.Concat(priceCondition, joiner, String.Format("'{0}'", price))
If joiner = " " Then joiner = ", "
End If
Next
Dim categoryCondition As String = String.Empty
joiner = " "
For i = 0 To categoryFilter.Items.Count - 1
If categoryFilter.Items(i).Selected Then
Dim category As String = categoryFilter.Items(i).ToString
categoryCondition = String.Concat(categoryCondition, joiner, String.Format("'{0}'", category))
If joiner = " " Then joiner = ", "
End If
Next
Dim whereClause As String = String.Empty
joiner = " where "
If Not String.IsNullOrEmpty(priceCondition) Then
whereClause = String.Concat(whereClause, joiner, String.Format(" price_range IN ({0})", priceCondition)) ' and sub_category IN ({0})", condition.Substring(0, condition.Length - 1))
joiner = " and "
End If
If Not String.IsNullOrEmpty(categoryCondition) Then
whereClause = String.Concat(whereClause, joiner, String.Format(" sub_category in ({0})", categoryCondition))
joiner = " and "
End If
Return String.Concat(query, whereClause)
End Function