PDO-SQL-Abfrage mit mehreren Filtern
Gibt es eine einfachere Möglichkeit für mich, dies zu codieren und dasselbe auszuführen, ohne so viele Abfragen zu haben? Ich versuche, Paginierung hinzuzufügen (hier nicht im Code enthalten) und es funktioniert auf meiner ALL-Abfrage, aber die AND / OR-Abfragen geben lustige Ergebnisse und wird zu Kopfschmerzen. Ansonsten funktioniert die Filterung der Ergebnisse einwandfrei, Sie müssen nur paginieren.
$filter = isset($_POST['filter']) ? $_POST['filter'] : null;
$status = isset($_POST['status']) ? $_POST['status'] : null;
if(empty($filter) && empty($status)) {
//echo 'ALL query';
$sql = 'SELECT * FROM _product JOIN _module_type ON module_type = module_id';
$sth = $link->prepare($sql);
$sth->execute(array());
$result = $sth->fetchall();
} else {
// display result if filter AND status are selected
if(!empty($filter) && !empty($status)) {
//echo 'AND query';
$sql = 'SELECT * FROM _product JOIN _module_type ON module_type = module_id WHERE module_type = :filter AND product_status = :status';
$sth = $link->prepare($sql);
$sth->execute(array(':filter' => $filter, ':status' => $status));
$result = $sth->fetchall();
} else {
// display result if filter OR status are selected
if(!empty($filter) || !empty($status)) {
//echo 'OR query';
$sql = 'SELECT * FROM _product JOIN _module_type ON module_type = module_id WHERE module_type = :filter OR product_status = :status';
$sth = $link->prepare($sql);
$sth->execute(array(':filter' => $filter, ':status' => $status));
$result = $sth->fetchall();
}
}
}
//test sql
echo $sql.'<br />';
$bgcolor = '';
foreach($result as $key => $value) {
if(($bgcolor=='#ffffff') ? $bgcolor='#f1f1f1' : $bgcolor='#ffffff') {
echo '<tr bgcolor="'.$bgcolor.'">';
echo '<td>'.$value['product_id'].'</td>';
echo '<td>'.$value['product_name'].'</td>';
echo '<td>'.$value['product_type'].'</td>';
echo '<td>'.$value['module_name'].'</td>';
echo '<td>'.$value['product_price'].'</td>';
echo '<td>'.$value['product_status'].'</td>';
echo '</tr>';
}
}
echo '</table>';