Top-Themen

Aktuelle Themen (A bis Z)

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 ?

Mitglied: mrmonk

mrmonk (Level 1) - Jetzt verbinden

05.06.2008, aktualisiert 17:09 Uhr, 3556 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 ..
Ähnliche Inhalte
Internet

Mailserver über DynDNS realisierbar?

Frage von 125721Internet6 Kommentare

Hallo Leute, mein Wissensstand in dem Bereich ist nicht der Größte, deshalb ein paar Fragen zum privaten Mailserver. Mein ...

Router & Routing

PfSense VPN so realisierbar?

gelöst Frage von RaversRouter & Routing15 Kommentare

Hallo zusammen, ich habe folgendes vor und wollte mal eure Meinung hören, ob dies so zu realisiern ist oder ...

Hardware

15 PCs von einem gemeinsamen HDD Array booten. Realisierbar?

gelöst Frage von sven784230Hardware9 Kommentare

Hallo zusammen, folgendes Szenario habe ich mir vorgestellt (kann natürlich auch völlig hirnrissig sein - ich lasse mich da ...

Neue Wissensbeiträge
iOS
WatchChat für Whatsapp
Tipp von Criemo vor 1 TagiOS3 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor !!!
Tipp von Criemo vor 1 TagiOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Off Topic
Avengers 4: Endgame - Erster Trailer
Information von Frank vor 4 TagenOff Topic2 Kommentare

Ich weiß es ist Off Topic, aber ich freue mich auf diesen Film und vielleicht geht es anderen hier ...

Webbrowser
Microsoft bestätigt Edge mit Chromium-Kern
Information von Frank vor 4 TagenWebbrowser5 Kommentare

Microsoft hat nun in seinem Blog bestätigt, dass die nächste Edge Version kein EdgeHTML mehr für die Darstellung benutzen ...

Heiß diskutierte Inhalte
Windows Netzwerk
Kerio. Kann keine Mails empfangen aber senden. Wer ist schuld. Kerio oder Windows domäne?
gelöst Frage von frosch2Windows Netzwerk31 Kommentare

Hallo, es existiert ein Problem bei uns mit dem mailen. Alle bestehenden Nutzer können mailen. Raus wie rein. Neuen ...

LAN, WAN, Wireless
WLAN und Ausmessung - Eine Glaubensfrage?
Frage von ptr2brainLAN, WAN, Wireless22 Kommentare

Liebe Experten, als Sys-Admin habe ich mir schon öfter die Frage gestellt, ob es sich beim Thema WLAN und ...

Hosting & Housing
VMware VM mit über 1TB RAM für S4HANA
Frage von Leo-leHosting & Housing22 Kommentare

Hallo zusammen, wer hat Erfahrng und kann mir einen Tipp zum sizing von S4HANA Systemen geben? Wir möchten, zunächst ...

Virtualisierung
Gebrauchte Server Hardware als Virtualisierungs-"Spielwiese"?
Frage von NixVerstehenVirtualisierung19 Kommentare

Einen wunderschönen guten Morgen zusammen, ich möchte mich gerne etwas tiefer mit dem Thema Virtualisierung beschäftigen und dazu ein ...