이렇게 코드를 작성하고 너무 많은 쿼리를 수행하지 않아도 똑같은 작업을 수행 할 수있는 간단한 방법이 있습니까? 내가 페이지 매김 (여기 코드에 포함되지 않음)을 추가하려하고 내 모든 쿼리에서 작동하지만 AND/OR 쿼리가 재미있는 결과를 내고 두통이되고 있습니다. 그 외 결과 필터링은 완벽하게 페이지 매김이 필요합니다.PDO 다중 필터 SQL 쿼리
$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>';
의 한 줄을 변경할 필요가 없습니다 것입니다. 여기에 대한 답변을 참조하십시오 : http://stackoverflow.com/questions/11740066/simplify-a-mysql-query-that-can-have-multiple-input-options-using-php – Jim