Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Abfrage so realisierbar ?

Frage Entwicklung Datenbanken

Mitglied: mrmonk

mrmonk (Level 1) - Jetzt verbinden

05.06.2008, aktualisiert 17:09 Uhr, 3507 Aufrufe, 5 Kommentare

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 !!!
Mitglied: bytecounter
05.06.2008 um 12:26 Uhr
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
Bitte warten ..
Mitglied: mrmonk
05.06.2008 um 15:58 Uhr
Hallo,

erstmal besten Dank für die Hilfe !

Sorry, dass ich nochmal nachfrage, aber meine PHP Kenntnisse halten sich doch etwas in Grenzen.

Bisher sind die Auswahlfelder ja in einem Formular (GET) bei "Absenden" wird ja eine neue Seite aufgerufen auf der die gefilterten Ergebnisse dargestellt werden.

Wie und vorallem wo binde ich jetzt den PHP Code ein ?

Wäre nett, wenn ihr mich nochmal unterstützen könntet.

Besten Dank !!!!
Bitte warten ..
Mitglied: bytecounter
05.06.2008 um 16:17 Uhr
Das Snippet muss natürlich in das Script, welches nach Absenden des Formulars ausgeführt wird.

Infos über Formulare und PHP findest Du im Web genügend..einfach mal googlen...
Bitte warten ..
Mitglied: mrmonk
05.06.2008 um 16:22 Uhr
Ok, Danke.

Nachdem ich mich da jetzt mal ein bißchen selbst versucht habe, kommt folgendes dabei raus.
Allerdings werden immer alle Artikel angezeigt:

<?php require_once('Connections/conExpero.php'); ?>
<?php

$sql_query = "SELECT * FROM ex_articles WHERE";

if ($_GET['subcategory']) {

$sql_query .= " subcategory LIKE ".$_GET['subcategory']." AND";
}
if ($_GET['region ']) {

$sql_query .= " region LIKE ".$_GET['region']." AND";
}
if ($_GET['subcategory']) {

$sql_query .= " city LIKE ".$_GET['city']." AND";
}

// "Dummy", falls keine der obigen Felder übermittelt und Anzahl max. Ergebnisse
$sql_query .= " 1 LIMIT 0,50;"

?>




<?php
$varRegion_recErlebnis_detail = "0";
if (isset($_POST["region"] )) {
$varRegion_recErlebnis_detail = (get_magic_quotes_gpc()) ? $_POST["region"] : addslashes($_POST["region"] );
}
$varCity_recErlebnis_detail = "0";
if (isset($_POST["city"] )) {
$varCity_recErlebnis_detail = (get_magic_quotes_gpc()) ? $_POST["city"] : addslashes($_POST["city"] );
}
$varSubcategory_recErlebnis_detail = "0";
if (isset($_POST["subcategory"] )) {
$varSubcategory_recErlebnis_detail = (get_magic_quotes_gpc()) ? $_POST["subcategory"] : addslashes($_POST["subcategory"] );
}
mysql_select_db($database_conExpero, $conExpero);
$query_recErlebnis_detail = sprintf($sql_query, $varSubcategory_recErlebnis_detail,$varRegion_recErlebnis_detail,$varCity_recErlebnis_detail);
$recErlebnis_detail = mysql_query($query_recErlebnis_detail, $conExpero) or die(mysql_error());
$row_recErlebnis_detail = mysql_fetch_assoc($recErlebnis_detail);
$totalRows_recErlebnis_detail = mysql_num_rows($recErlebnis_detail);
?>

Was ist denn daran falsch ?
Bitte warten ..
Mitglied: bytecounter
05.06.2008 um 17:09 Uhr
Ist auch kein Wunder...Du arbeitest mit POST, ich mit GET, daher kommt es zu folgender Abfrage:

SELECT * FROM ex_articles WHERE 1 LIMIT 0,50;

=> Alle Ergebnisse

Du kannst auch mit

echo $sql_query;

am Ende meines Scripts angucken, wie die Query ausschaut.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
C und C++
gelöst IF Abfrage funktioniert nicht mehr (2)

Frage von pablovic zum Thema C und C ...

Datenbanken
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Datenbanken
gelöst Row Number bei einer Abfrage sinnvoll einsetzen (1)

Frage von Aximand zum Thema Datenbanken ...

Batch & Shell
gelöst Batch Abfrage Vergleiche mit Variable goto (4)

Frage von Zunaras zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...