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, 3546 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 ...

Microsoft

Abschlussprojekt (FISI) Idee, Umfang realisierbar?

Frage von splinxMicrosoft15 Kommentare

Hallo Forum, Ich war in den letzten Tagen damit beschäftigt mir ein Thema/Projekt für das Abschlussprojekt meiner Ausbildung zum ...

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
Humor (lol)
(Part num your Hacked phone. +XX XXXXXX5200)
Erfahrungsbericht von Henere vor 16 StundenHumor (lol)1 Kommentar

Mein Handy hat aber ne ganz andere Endnummer. Muss ich mir jetzt Sorgen machen ? :-) Vielleicht betrifft es ...

Exchange Server

Letztes Update für Exchange 2016 CU9 war in gewisser Weise destruktiv

Erfahrungsbericht von DerWoWusste vor 17 StundenExchange Server6 Kommentare

Kurzer Erfahrungsbericht zu Exchange2016-KB4340731-x64 Der Exchangeserver hat wie gewöhnlich versucht, es in der Nacht automatisch zu installieren - abgesehen ...

Erkennung und -Abwehr

Neue Sicherheitslücke Foreshadow (L1TF) gefährdet fast alle Intel-Prozessoren

Information von Frank vor 1 TagErkennung und -Abwehr3 Kommentare

Eine neue Sicherheitslücke, genannt Foreshadow (alias L1TF) wurde auf der Usenix Security 18 von einem Team internationaler Experten veröffentlicht. ...

Vmware
VMware Updates gegen L1 Lücke
Information von sabines vor 2 TagenVmware

Für die Vmware Produkte vCenter Server, ESXi, Workstation und Fusion stehe Updates bereit um die L1 Lücke zu schließen. ...

Heiß diskutierte Inhalte
Windows Server
Domäne einsilbig mit nur einem Namen benannt - sowie AD und MX auf einer VM Kardinalsfehler?
Frage von TomTestWindows Server48 Kommentare

Hallo liebe Freunde gepflegter Probleme, seit kurzem soll ich eine Domäne verwalten die zuvor von einem IT-Dienstleister erstellt und ...

Microsoft
VPN Verbindung kann nicht aufgebaut werden
Frage von AlexderITlerMicrosoft35 Kommentare

Hallo, Ich möchte an einem unserer PCs in unserer Tochterfirma eine VPN zu unserem Netzwerk einrichten. Das schlägt allerdings ...

Windows Server
Windows Server per Web auf Daten zugreifen und verwalten
Frage von matze2090Windows Server16 Kommentare

Hallo, ich würde gerne von außen auf meinem Windows Server zugreifen um auf meine Daten zu verwalten. Meine frage ...

DNS
Gibt es eine Art DNS Proxy?
Frage von icepietDNS16 Kommentare

Hallo Nerds, Ich würde gerne folgendes machen: ts.domain.de:3389 soll auf 1.2.3.4:3389 auflösen ts2.domain.de:3389 soll auf 1.2.3.4:3390 auflösen Gibt es ...