Проблемы с использованием запроса выбора в sql server & asp.net - PullRequest
0 голосов
/ 31 мая 2011
SELECT * 
FROM [productDetail] 
WHERE 
     Price BETWEEN 0 AND 2000 
     OR Price BETWEEN 2000 AND 12000 
     AND CategoryID = 2  
     AND caravanOffline = 0 
ORDER BY 
     price

Запрос не дает желаемого результата, он также показывает продукты, чей categoryID равен 3,1 и т. Д.

Может ли кто-нибудь определить проблему в запросе.

Обновленный код:

static public DataTable GetSelectedFilterMotorhomes(ArrayList caravans)
{

    string sqldefault = "Select * from productDetail Where";
    string sqlBuilder = "";
    int starter = 0;
    int count = caravans.Count;
    string sqlOperator = "OR";

    if (caravans.Count > 0)
    {

        while (count > starter) //build the query depending on the number of caravans.selected.count 
        {

            sqlBuilder += "((Price between " + caravans[count - 1] + "))" + sqlOperator;
            count--;


        }

        string addQuery = sqldefault + sqlBuilder;
        string removeOR = addQuery.Substring(0, addQuery.Length - 2);  //remove OR
        string finalQuery = removeOR + "AND (CategoryID = 2)  AND (caravanOffline = 0)  order by Price"; //Display caravans in ascending order

        SqlDataAdapter da = new SqlDataAdapter(finalQuery, ConnectionString);
        DataTable dt = new DataTable();
        da.Fill(dt);
        return dt;
    }
    else
    {
        string returnAllCaravans = "Select * from productDetail WHERE CategoryID = 2 AND caravanOffline = 0";

        SqlDataAdapter da = new SqlDataAdapter(returnAllCaravans, ConnectionString);
        DataTable dt = new DataTable();
        da.Fill(dt);
        return dt;
    }

}

Ответы [ 3 ]

3 голосов
/ 31 мая 2011

Вам может понадобиться скобка? Мне нужно было бы точно знать, что вы пытались сделать с помощью своего запроса, но, вероятно, вам нужна скобка после OR, а затем снова либо после CategoryID = 2, либо после caravanOffline = 0. Посмотрите, возвращает ли какой-либо из следующих запросов то, что вы ищете.

Select
    *
from [productDetail]
WHERE
    Price between 0 AND 2000
    OR (Price between 2000 AND 12000 AND CategoryID = 2) AND caravanOffline = 0
order by price

Select
    *
from [productDetail]
WHERE
    Price between 0 AND 2000
    OR (Price between 2000 AND 12000 AND CategoryID = 2 AND caravanOffline = 0)
order by price
1 голос
/ 31 мая 2011

Что вы действительно хотите сделать с предложением WHERE ?? Без скобок вообще не понятно, что вы пытаетесь выбрать

Вы действительно имеете в виду:

WHERE 
     (Price BETWEEN 0 AND 2000 OR Price BETWEEN 2000 AND 12000)
     AND CategoryID = 2  
     AND caravanOffline = 0 

Цена составляет от 0 до 2000, или от 2000 до 12000 (на самом деле не имеет смысла), И в любом случае, CategoryID равен 2?

Или вы имеете в виду:

WHERE 
     Price BETWEEN 0 AND 2000 
     OR 
     (Price BETWEEN 2000 AND 12000 AND CategoryID = 2 AND caravanOffline = 0)

Цена либо между 0 и 2000 (без каких-либо других ограничений) ИЛИ цена между 2000 и 12000, но только если CategoryID = 2 и CaravanOffline = 0 истинны одновременно) ??

Или вы ищете что-то еще, кроме этих двух вариантов?

1 голос
/ 31 мая 2011

Я думаю, что, возможно, понадобится несколько скобок ...

SELECT * FROM productDetail
WHERE Price BETWEEN 0 AND 2000 
OR (Price BETWEEN 2000 AND 12000
AND CategoryId = 2
AND caravanOffline = 0)
ORDER BY price

Предполагая, что это логика, которую вы хотите!Ваш вопрос довольно расплывчатый, я предполагаю, что вам нужны караваны до 2000 независимо от категории и caravanOffline, или караваны между 2000 и 12000 с идентификатором категории 2 и caravanOffline 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...