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

Frage Entwicklung Datenbanken

Abfrage so realisierbar ?

Mitglied: mrmonk

mrmonk (Level 1) - Jetzt verbinden

05.06.2008, aktualisiert 17:09 Uhr, 3532 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
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 2 StundenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 20 StundenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 21 StundenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 22 StundenSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von 92943Windows 1031 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Netzwerkgrundlagen
Welches Modem für VDSL 50000 der T-Com
gelöst Frage von Windows10GegnerNetzwerkgrundlagen21 Kommentare

Hallo, ein Kollege von mir will sich VDSL50000 von der T-Com holen, um daran einen Server zu betreiben. Ich ...

Sicherheit
Meltdown und Spectre: Die machen uns alle was vor
Information von FrankSicherheit18 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Netzwerke
Packet loss bei "InternetLeitungsvollauslastung"
gelöst Frage von Freak-On-SiliconNetzwerke17 Kommentare

Servus; Ja der Titel klingt komisch, is aber so. Wenn die Internetleitung voll ausgelastet ist, hab ich extreme packet ...