2016-09-21 4 views
0

У меня есть сетка данных на моем сайте, где я извлекаю информацию о компании из 2 таблиц.Использование UNION для извлечения данных в сетку

Я создаю форму, чтобы отсортировать результаты на основе 3-х фильтров (Категория, штат, город)

Это мой запрос для загрузки данных в сети на начальном этапе. Я хочу, чтобы он был заполнен, будет ВСЕ мои данные таблицы UNTIL пользователь решает его фильтровать, поэтому я использую UNION, так как без него мой запрос ждет, когда я передам значение строки запроса, чтобы завершить инструкцию WHERE.

SELECT * FROM BND_listing left join BND_ListingCategories 
on BND_Listing.CatID=BND_ListingCategories.CatID 

UNION 

SELECT * FROM BND_listing left join BND_ListingCategories 
on BND_Listing.CatID=BND_ListingCategories.CatID 
WHERE (CategoryName = '[querystring:filter-Category]' OR  '[querystring:filter-Category]' is NULL) 

Я не уверен, что это правильная процедура для этого.

У меня возникли трудности с пониманием параметра NULL этого запроса. При загрузке страницы нет строки запроса.

Только один раз, когда пользователь нажимает кнопку «СОРТИРОВКА», строка запроса добавляется в URL-адрес. Пользователь может выбрать сортировку по 1 или все 3 фильтра, но в случае, если они сортируют только по одному из вариантов. Строка запроса передает ВСЕ для остальных двух, которые остались в одиночестве.

IE: фильтр-категория/Barber% 20Shop/фильтр-Город/Все/фильтр-State/Все Здесь пользователь только выбрать «парикмахерской» от 1 раскрывающиеся и покинул город & государственные раскрывающиеся меню, как их по умолчанию.

Мой запрос, который «прослушивает» параметры строки запроса, работает неправильно в моем приложении. Однако при использовании в студии SQL Management следующего содержания он правильно выполняет мои записи.

SELECT * FROM BND_listing left join BND_ListingCategories 
on BND_Listing.CatID=BND_ListingCategories.CatID 
WHERE (CategoryName = 'Barber Shop' OR '[querystring:filter-Category]' is  NULL) 

Это будет мой запрос данных-сетки со всеми 3 «Прослушивающими» предложениями WHERE.

SELECT * FROM BND_listing left join BND_ListingCategories 
on BND_Listing.CatID=BND_ListingCategories.CatID 

UNION 

SELECT * FROM BND_listing left join BND_ListingCategories 
on BND_Listing.CatID=BND_ListingCategories.CatID 
WHERE (CategoryName = '[querystring:filter-Category]' OR  '[querystring:filter-Category]' is NULL) 
AND (city = '[querystring:filter-City]' OR '[querystring:filter-City]' IS  NULL) 
AND (state ='[querystring:filter-State]' OR '[querystring:filter-State]' IS  NULL) 

Любая помощь, ввод, примеры, проницательность высоко оценены!

Примеры Интернет & SQL Studio enter image description here enter image description here enter image description here enter image description here

+0

показать результат с первого выбора и второго выбора. –

+0

Hello Denny, Я добавил фотографии. – UserSN

+0

что такое [querystring: filter-Category], sry idk это. это значение, введенное из html ?? –

ответ

1

Союз не собирается получить, что вы хотите. Цель состоит в том, чтобы объединить результаты двух или более запросов вместе, сохраняя отдельные значения. В вашем случае первая половина объединения фиксирует все данные, а вторая половина фиксирует отфильтрованные данные. Поскольку первая половина захватывает все, все возвращается.

Вы, кажется, делаете это, потому что у вас нет фильтров для первого запуска, но вы хотите, чтобы фильтры выполнялись во втором прогоне.

Не добавляйте предложение where, если строки запроса отсутствуют. Если они присутствуют, добавьте где и соответствующие предложения.

Вы упомянули сортировку, но в вашем запросе отсутствует заказ by clause. Вы хотите добавить один, если хотите, чтобы данные были отсортированы.

первый груз, не где пункт или все фильтры установлены в 'ALL'

SELECT * FROM BND_listing left join BND_ListingCategories 
on BND_Listing.CatID=BND_ListingCategories.CatID 
order by CategoryName, state, city 

Последующие нагрузки, с ИНЕКЕ.

SELECT * FROM BND_listing left join BND_ListingCategories 
on BND_Listing.CatID=BND_ListingCategories.CatID 
WHERE (CategoryName = '[querystring:filter-Category]' OR  '[querystring:filter-Category]' is NULL) 
AND (city = '[querystring:filter-City]' OR '[querystring:filter-City]' IS  NULL) 
AND (state ='[querystring:filter-State]' OR '[querystring:filter-State]' IS  NULL) 
order by CategoryName, state, city 

Edit: Вы не можете иметь 2 запросов, поскольку плагин позволяет только 1.

я предполагаю, на «прослушивание» вы имеете в виду строки запроса: фильтр Категория будут заменены на то, что в категории Строка запроса. Поскольку он заменен в вашем запросе, вы не можете сравнить с null. так как ни один фильтр не «ВСЕ», вам нужно принять это во внимание. Попробуйте это:

SELECT * 
FROM BND_listing 
left join BND_ListingCategories 
    on BND_Listing.CatID=BND_ListingCategories.CatID 
WHERE 
    (
     '[querystring:filter-Category]' = 'ALL' -- for when the queryString is set to ALL 
     or '[querystring:filter-Category]' = '' -- for when the queryString isn't available like first load. this replaces the is null comparison. you can't compare a string literal to null as they are wrapped in quotes 
     or CategoryName = '[querystring:filter-Category]' -- this is the comparison to your column 
    ) 
    AND (
     '[querystring:filter-City]' = 'ALL' 
     or '[querystring:filter-City]' = '' 
     or city = '[querystring:filter-City]' 
    ) 
    AND (
     '[querystring:filter-State]' = 'ALL' 
     or '[querystring:filter-State]' = '' 
     or state = '[querystring:filter-State]' 
    ) 
order by CategoryName, state, city 
+0

Спасибо за ответ @serverSentinel, у меня нет возможности делать 2 отдельных запроса с мой сетчатый плагин только один. Невозможно ли объединить оба запроса так, чтобы он выполнял 1-й загрузку с 1-го запроса и со вторым загрузкой в ​​фоновом режиме ожидал строку запроса? Для сортировки я имел в виду только действие пользователя, выбирающего поле из моего раскрывающегося списка, которое вводит строку запроса, вытягивая только соответствующие поля. Не настоящий SORT в SQL. – UserSN

+0

Я отредактировал ответ. Вы не можете сравнить с null в этом экземпляре, потому что, когда ваш сетчатый плагин выполняет поиск и заменяет запрос, он заменит часть внутри кавычек, оставляя (... или '' равно null), которая никогда не верна. (... или '' = '') будет истинным. – serverSentinel

+0

Я попытаюсь подключить это в @serverSentinel, пока я просто добавил еще одну страницу перед этой, которая перенаправляет, всегда добавляя по крайней мере ВСЕ к моим строкам запроса. – UserSN

0

Спасибо за помощь & примеров. Мне удалось отсортировать мои запросы на самом деле, у меня возникла проблема с сеткой, которую нужно было решить в первую очередь.

select * FROM BND_listing right join BND_ListingCategories 
on BND_Listing.CatID=BND_ListingCategories.CatID 
where 
(CategoryName = '[querystring:filter-Category]' or '[querystring:filter- Category]'='All') 
and 
(City = '[querystring:filter-City]' or '[querystring:filter-City]'='All') 
and 
(Region= '[querystring:filter-State]' or '[querystring:filter-State]'='All') 
and 
(Country= '[querystring:filter-Country]' or '[querystring:filter- Country]'='All') 

Я просто перенаправленная страница, которая всегда проходит по крайней мере значения ALL для всех моих запросов строковых фильтров, которые получили мою сетка заселена.