2016-09-21 35 views
0

Ich habe ein Datenraster auf meiner Website, wo ich Unternehmensinformationen aus 2 Tabellen ziehe.Verwenden von UNION, um Daten in das Raster zu ziehen

ich eine Form bin Erstellung dieser Ergebnisse auf 3 Filter (Kategorie, Region, Stadt)

Dies ist meine Abfrage von Daten in das Netz zu sortieren zunächst zu laden. Ich möchte, dass es ALLE meine Tabellendaten bevölkert, bis ein Benutzer beschließt, sie zu filtern, weshalb ich UNION verwende, da ohne sie meine Abfrage darauf wartet, dass ich einen Abfragezeichenfolgenwert übergebe, um ihre WHERE-Anweisung zu vervollständigen.

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) 

Ich bin nicht sicher, ob dies der richtige Vorgang ist, dies zu tun.

Ich habe Schwierigkeiten, den NULL-Parameter dieser Abfrage zu verstehen. Beim Laden der Seite gibt es keine Abfragezeichenfolge.

Nur wenn ein Benutzer die Schaltfläche "SORTIEREN" drückt, wird eine Abfragezeichenfolge in die URL eingefügt. Ein Benutzer kann wählen, ob er nach 1 oder allen 3 Filtern filtern möchte, aber in dem Fall, dass er nur nach 1 der Optionen sortiert. Der Abfrage-String wird eine ALL für die anderen zwei übergeben, die allein gelassen wurden.

IE: Filter-Kategorie/Barber% 20Shop/Filter-City/Alles/Filter-State/Alle Hier ein Benutzer nur 'Barber Shop' von 1 Dropdown wählen und verließ die Stadt & Staats Drop Tiefen als ihre Standardauswahl

Meine Abfrage, die auf die Abfragezeichenfolgenparameter "hört", funktioniert nicht ordnungsgemäß in meiner Anwendung. Wenn Sie jedoch Folgendes in SQL Management Studio verwenden, werden meine Datensätze ordnungsgemäß abgerufen.

Dies wäre meine Data-Grid-Abfrage mit allen 3 "Listening" WHERE-Anweisungen enthalten.

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) 

Jede Hilfe, Eingabe, Beispiele, Einblick sehr geschätzt!

Beispiele Online & SQL Studio enter image description here enter image description here enter image description here enter image description here

+0

zeigen Sie Ihr Ergebnis von der ersten Auswahl und die zweite Auswahl. –

+0

Hallo Denny, Ich habe Fotos hinzugefügt. – UserSN

+0

Was ist [Querystring: Filter-Kategorie], sry IDK das. ist dieser Wert von HTML eingegeben ?? –

Antwort

1

Union wird Ihnen nicht bekommen, was Sie wollen. Es ist Zweck es die Ergebnisse von 2 oder mehr Abfragen zusammen zu verbinden, die die unterschiedlichen Werte behalten. In Ihrem Fall erfasst die erste Hälfte der Union alle Daten und die zweite Hälfte erfasst die gefilterten Daten. Da die erste Hälfte alles erfasst, wird alles zurückgegeben.

Sie scheinen dies zu tun, weil Sie keine Filter für den ersten Lauf haben, aber Filter für den zweiten Lauf möchten.

Fügen Sie die where-Klausel nicht hinzu, wenn die Abfragezeichenfolgen nicht vorhanden sind. Wenn sie vorhanden sind, fügen Sie wo und die entsprechenden Klauseln hinzu.

Sie erwähnen Sort, aber Ihre Abfrage fehlt eine Reihenfolge nach Klausel. Sie möchten eine hinzufügen, wenn die Daten sortiert werden sollen.

1. Last, keine where-Klausel oder alle Filter werden auf 'ALLE'

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

Folgelasten, mit denen Klauseln.

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: Sie können nicht zwei Fragen haben, weil das Plugin erlaubt nur 1.

Ich gehe davon durch „Hören“ Meinen Sie den Abfragezeichenfolgeflag: Filter-Kategorie durch, was auch immer in der Kategorie ersetzt werden Abfragezeichenfolge Da es in Ihrer Abfrage ersetzt wurde, können Sie nicht mit null vergleichen. Da kein Filter "ALL" ist, müssen Sie das berücksichtigen. Try this:

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

Vielen Dank für die Antwort @serverSentinel, ich habe keine Möglichkeit, zwei separate Abfragen mit Mein Grid Plug-in nur eins. Gibt es keine Möglichkeit, beide Abfragen so zu kombinieren, dass sie die 1. Ladung mit der 1. Abfrage und die 2. Ladung im Hintergrund auf eine Abfragekette wartet? Für die Sortierung meine ich nur die Aktion eines Benutzers, der ein Feld aus meiner Dropdown-Liste auswählt, das die Abfragezeichenfolge eingibt und nur die übereinstimmenden Felder zieht. Nicht eine tatsächliche SORT in SQL. – UserSN

+0

Ich habe die Antwort bearbeitet. Sie können in dieser Instanz nicht mit "null" vergleichen, da Ihr Gitterplugin eine Suche und eine Ersetzung in der Abfrage durchführt und dadurch den Teil innerhalb der Anführungszeichen ersetzt, der (... oder '' ist null), was niemals wahr ist. (... oder "=") wird wahr sein. – serverSentinel

+0

Ich werde versuchen, dies in @ ServerSentinel für den Augenblick zu schließen, ich habe gerade eine andere Seite vor dieser, die immer mindestens Hinzufügen von mindestens meine Query-Strings umleiten hinzugefügt. – UserSN

0

Hilfe alle & Beispiele Vielen Dank für. Ich war in der Lage, meine Anfragen in der Tat zu sortieren, hatte ich ein Problem mit dem Raster, das zuerst angesprochen werden musste.

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') 

Ich habe einfach eine Seite umleiten, die atleast einen ALL-Wert für alle meine Abfrage-String-Filter immer passiert, die mein Raster bevölkert bekam.

Verwandte Themen