Komplexe WHERE-Bedingung

GottiRhg

Mitglied
Hallo zusammen,
ich stehe vor folgendem Problem.
Ich möchte ein Datenbank-Select (MySQL) durchführen. Soweit so gut.
Nun habe ich ca. 30 Eingabefelder, die in dem Select als Where-Bedingung verwendet werden könnten. Wie bekomme ich es hin, einen Select zu bauen, der damit klar kommt, dass von den 30 Eingabefeldern ggf. nur 10 Inhalt haben?

Beispiel:
Eingabefelder
Alter: leer
Name: leer
Position: Stürmer

erwartetes Ergebnis: Alle Stürmer aus der Datenbank werden gefunden.

Eingabefelder
Alter: 20
Name: leer
Position: Stürmer

erwartetes Ergebnis: Alle Stürmer, die 20 Jahre sind, werden in der Datenbank gefunden.

Bekommt man so etwas elegant hin?
 
Falls das Suchformular in PHP ist, hier eine Lösung:

PHP MySQL Einfacher SQL-Filter aus $_POST zusammenstellen

In dieser Lösung sind keine Security-Relevanten Teile eingebaut. Der Code dient eher als Idee, wie man sowas umsetzen kann. Natürlich muss man noch mit input_filter() und mysql_escape_string() arbeiten....
PHP:
<!-- Formular -->
<form action="?" method="post">
    Text 1:<input type="text" name="text1" /><br />
    Text 2:<input type="text" name="text2" /><br />
    Zahl 3:<input type="text" name="zahl3" /><br />
    <input type="submit" name="submit" />
</form>
<hr />

<?php
// Prüfen ob das Formular gesendet wurde
if(isset($_POST['submit'])){
    // Array initializieren. Falls kein argument angegeben wurde,
    // dann ist die Argumentliste ein leeres Array
    $wheres = array();
    //Jedes Feld prüfen und ggf in den Where-Array einfügen
    if($_POST['text1']) $wheres[] = "text1='{$_POST['text1']}'";
    if($_POST['text2']) $wheres[] = "text2='{$_POST['text2']}'";
    if($_POST['zahl3']) $wheres[] = "zahl3={$_POST['zahl3']}";

    // WHERE-Tel des SQL-String zusammenstellen
    if(count($wheres)>0) $wherestring = "WHERE ".implode(' AND ', $wheres);
    //SQL-String zusammensetzen
    $sql = "SELECT * FROM mytable {$wherestring}";
    //TODO: Sql an die DB absetzen
    echo $sql;
}
?>
 
Ein Problem habe ich nun noch.
Und zwar:
Wie bekomme ich bei einem JOIN den maximalen Wert raus.

Beispiel:
Mein SQL Statement:
Code:
SELECT * FROM player AS player JOIN data AS data ON data.playerid = player.playerid {$wherestring} GROUP BY player.playerid LIMIT 50

Funktioniert einwandfrei.
Nun kann es aber vorkommen, dass es in der Tabelle data mehrere Datensätze gibt. Ich möchte nun eigentlich den Datensatz mit dem höchsten Timestamp im Feld data.date
 

Neue Beiträge

Zurück