Abfrage so realisierbar ?
Hallo,
ich habe eine Frage zu folgender SQL Abfrage:
SELECT * FROM ex_articles WHERE subcategory = 'varSubcategory' OR region = 'varRegion' OR city = 'varCity'
Erreichen will ich folgendes
Auf meiner Website gibt es 3 Selectboxen in einem Formular.
Dieses werden per PHP mit Inhalten aus den jeweilgen Spalten einer MySQL Datenbank gefüllt.
Nun soll man die Möglichkeit haben durch Auswählen von Werten der 3 Selectboxen, die Datensätze zu filtern.
Wichtig ist, dass abhängig gefiltert wird, d.h. egal ob nur in einer Box ein Wert ausgwählt wird, in 2 oder in allen 3.
Leider komme ich mit meiner Abfrage oben nicht sonderlich weit. Einen Wert herauszufiltern ist nicht das Problem. Doch sobald ich einen zweiten Wert auswähle muss das Filterergebnis ja
Beispiel:
Selectbox 1: "Kategorie"
Selectbox 2: "Region"
Selectbox 3: "Ort"
Wenn ich jetzt in der Selectbox "Kategorie" den Wert "Sport" auswähle und in der Selectbox "Region" den Wert "NRW", dann sollen alle Artikel angezeigt werden, die sowohl der Kategorie "Sport" als AUCH in der Region "NRW" stattfinden. Das nicht ausgefüllte Feld "Ort" bleibt von der Filterung unberücksichtigt.
Wenn ich jedoch Werte in allen drei Boxen auswähle, dann müssen auch alle drei Felder in die Filterung eingebunden werden. Beim Filterergebnis müssen alle zwei bzw. drei Bedingungen exakt zutreffen. Die Übereinstimmung eines Wertes in nur einer Spalte reicht nicht aus.
Beispiel:
Wenn als Kategorie "Sport" ausgwählt wird, als Region "Hessen" und als Stadt "Frankfurt", dann darf das Ergebnis nur Werte ausgeben, die ALLEN 3 Bedinungen entsprechen. Ergebnisse die etwa nur beim Wert "Frankfurt" oder nur beim Wert "Hessen" eine Übereinstimmung liefern, müss´ten unberücksichtsigt bleiben.
Geht so etwas überhaupt `?
Hat jemand einen Verbesserungsvorschlag ?
Danke für jeden Tipp !
Grüße !!!
ich habe eine Frage zu folgender SQL Abfrage:
SELECT * FROM ex_articles WHERE subcategory = 'varSubcategory' OR region = 'varRegion' OR city = 'varCity'
Erreichen will ich folgendes
Auf meiner Website gibt es 3 Selectboxen in einem Formular.
Dieses werden per PHP mit Inhalten aus den jeweilgen Spalten einer MySQL Datenbank gefüllt.
Nun soll man die Möglichkeit haben durch Auswählen von Werten der 3 Selectboxen, die Datensätze zu filtern.
Wichtig ist, dass abhängig gefiltert wird, d.h. egal ob nur in einer Box ein Wert ausgwählt wird, in 2 oder in allen 3.
Leider komme ich mit meiner Abfrage oben nicht sonderlich weit. Einen Wert herauszufiltern ist nicht das Problem. Doch sobald ich einen zweiten Wert auswähle muss das Filterergebnis ja
Beispiel:
Selectbox 1: "Kategorie"
Selectbox 2: "Region"
Selectbox 3: "Ort"
Wenn ich jetzt in der Selectbox "Kategorie" den Wert "Sport" auswähle und in der Selectbox "Region" den Wert "NRW", dann sollen alle Artikel angezeigt werden, die sowohl der Kategorie "Sport" als AUCH in der Region "NRW" stattfinden. Das nicht ausgefüllte Feld "Ort" bleibt von der Filterung unberücksichtigt.
Wenn ich jedoch Werte in allen drei Boxen auswähle, dann müssen auch alle drei Felder in die Filterung eingebunden werden. Beim Filterergebnis müssen alle zwei bzw. drei Bedingungen exakt zutreffen. Die Übereinstimmung eines Wertes in nur einer Spalte reicht nicht aus.
Beispiel:
Wenn als Kategorie "Sport" ausgwählt wird, als Region "Hessen" und als Stadt "Frankfurt", dann darf das Ergebnis nur Werte ausgeben, die ALLEN 3 Bedinungen entsprechen. Ergebnisse die etwa nur beim Wert "Frankfurt" oder nur beim Wert "Hessen" eine Übereinstimmung liefern, müss´ten unberücksichtsigt bleiben.
Geht so etwas überhaupt `?
Hat jemand einen Verbesserungsvorschlag ?
Danke für jeden Tipp !
Grüße !!!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 89210
Url: https://administrator.de/forum/abfrage-so-realisierbar-89210.html
Ausgedruckt am: 16.04.2025 um 07:04 Uhr
5 Kommentare
Neuester Kommentar
Hi,
die Abfrage würde ich mit PHP basteln:
<?php
Basis der Abfrage
$sql_query = "SELECT * FROM ex_articles WHERE";
if ($_GET['subcategory']) {
Füge das Feld 'subcategory' hinzu, wenn übermittelt
$sql_query .= " subcategory LIKE ".$_GET['subcategory']." AND";
}
if ($_GET['region ']) {
füge das Feld 'region' hinzu, wenn übermittelt
$sql_query .= " region LIKE ".$_GET['region']." AND";
}
if ($_GET['subcategory']) {
füge das Feld 'city' hinzu, wenn übermittelt
$sql_query .= " city LIKE ".$_GET['city']." AND";
}
// "Dummy", falls keine der obigen Felder übermittelt und Anzahl max. Ergebnisse
$sql_query .= " 1 LIMIT 0,50;"
?>
Das ist eine ungetestete und mal schnell geschriebene Lösung. Es gibt sicherlich auch bessere Ansätze.
Man sollte aber aus Performancegründen keine "SELECT *"-Abfrage verwenden, sondern immer die benötigten Felder explizit nennen.
vg
Bytecounter
die Abfrage würde ich mit PHP basteln:
<?php
Basis der Abfrage
$sql_query = "SELECT * FROM ex_articles WHERE";
if ($_GET['subcategory']) {
Füge das Feld 'subcategory' hinzu, wenn übermittelt
$sql_query .= " subcategory LIKE ".$_GET['subcategory']." AND";
}
if ($_GET['region ']) {
füge das Feld 'region' hinzu, wenn übermittelt
$sql_query .= " region LIKE ".$_GET['region']." AND";
}
if ($_GET['subcategory']) {
füge das Feld 'city' hinzu, wenn übermittelt
$sql_query .= " city LIKE ".$_GET['city']." AND";
}
// "Dummy", falls keine der obigen Felder übermittelt und Anzahl max. Ergebnisse
$sql_query .= " 1 LIMIT 0,50;"
?>
Das ist eine ungetestete und mal schnell geschriebene Lösung. Es gibt sicherlich auch bessere Ansätze.
Man sollte aber aus Performancegründen keine "SELECT *"-Abfrage verwenden, sondern immer die benötigten Felder explizit nennen.
vg
Bytecounter