2012-12-03 2 views
1

나는 모든 기사를 여기에서 읽었지만 여전히 내 코드 작업을 100 % 만들 수는 없다고 생각합니다. 나는 사용자가 4 가지 위치 중 하나를 기반으로 검색을 수행하거나 완전히 건너 뛸 수있는 PHP 양식이며,이 경우 'where location'절을 건너 뛰고 다음 매개 변수 그룹으로 이동해야합니다. 나는 위치의 단일 또는 다중을 선택하지만 난 그것을 생략하려고하면 작동하지 않을 때마다이 잘 작동mysql 저장 프로 시저 null 매개 변수를 건너 뛰십시오

CREATE PROCEDURE search( 
    IN inRoomsPerPage INT, 
    IN inStartItem INT, 
    IN inAddDate INT, 
    IN inLocation1 ENUM('T','F'), 
    IN inLocation2 ENUM('T','F'), 
    IN inLocation3 ENUM('T','F'), 
    IN inLocation4 ENUM('T','F') 
) 
BEGIN 
SELECT * 
FROM useradds as ua 
INNER JOIN household as hh on hh.idx_user_id = ua.idx_user_id 
INNER JOIN house as h on h.idx_user_id = ua.idx_user_id 
WHERE adddate >= (CURDATE() - INTERVAL inAddDate DAY) AND 
((inLocation1 IS NULL OR downtown = inLocation1) OR 
(inLocation2 IS NULL OR hwy = inLocation2) OR 
(inLocation3 IS NULL OR dewey = inLocation3) OR 
(inLocation4 IS NULL OR lewes = inLocation4)) 
ORDER BY ua.adddate DESC 
LIMIT inStartItem, inRoomsPerPage; 
END$$ 

(그냥 마지막 inAddDate 모든 것을 선택해야합니다) : 내 MySQL은 저장 프로 시저는 다음과 같습니다 . 내가

downtown = COALESCE(NULLIF(inLocation1, ''), downtown)) 

(inLocation1 IS NULL OR downtown = inLocation1) 

를 교체하는 경우 나 위치를 무시하는 경우 다음 모든 것을 선택하지만 난 어떤 2 ​​개 이상의 위치에 대한 검색을 수행하려는 경우 그것은 아무것도 반환하지 않습니다. 추가 할 매개 변수 그룹을 더 많이 가지고 있기 때문에이 문제를 해결할 수있는 좋은 방법이 될 것이라고 확신합니다.

+0

"건너 뛰기"란 무엇을 의미합니까? 입력 예제와 예상 결과를 통해 이상적인 상황을 언제든지 명확하게 설명해주십시오. – Bohemian

+0

. 그래서 php/html 부분은 4 곳의 주요 위치에서 집에있는 추가 게시물을 검색합니다. 그러나 검색은 여러 옵션을 제공합니다 : 임대료, 흡연 습관, 그래서, 모두 같은 형태로. 양식에서 대부분의 사용자 입력은 체크 박스입니다 : –

+0

값의 출처는 부적합합니다. 매개 변수 값과 예상되는 동작에 대해 이야기하고 있습니다. 최대한 명확하고 정확하게하십시오. 귀하의 질문이 모호하고 모호합니다. – Bohemian

답변

0

내 PHP/HTML 부분은 다음과 같습니다

<form action='' method='post' > 
    <select name='ckadddate'> 
     <option value='1'>last 24 hours</option> 
     <option value='3' selected>last 3 days</option> 
     <option value='7'>last week</option></select> 
in:<input type='checkbox' name='Downtown' >Downtown 
    <input type='checkbox' name='Hwy' >HWY 1 
     <input type='checkbox' name='Dewey'>Dewey 
     <input type='checkbox' name='Lewes'>Lewes 
<input name='SubmitSearch' type='submit' value='Search'> 

저장 프로 시저를 호출하는 PHP 함수의 일부는 다음과 같습니다이 솔기

if(isset($_POST['SubmitSearch'])){ 
    $cklocation1 = $cklocation2= $cklocation3= $cklocation4= ''; 
    if(isset($_POST['Downtown']))$cklocation1 = 'T'; 
     if(isset($_POST['Hwy']))$cklocation2 = 'T'; 
     if(isset($_POST['Dewey']))$cklocation3 = 'T'; 
     if(isset($_POST['Lewes']))$cklocation4 = 'T'; 
    **if(!isset($_POST['Downtown']) && !isset($_POST['Hwy']) && !isset($_POST['Dewey']) && !isset($_POST['Lewes'])){ 
     $cklocation1 = $cklocation2= $cklocation3= $cklocation4= 'T'; 
    }** 
$sql = 'CALL search_room(:RoomsPerPage, :StartItem,:Adddate, 
:Location1,:Location2,:Location3,:Location4)'; 
$params = array (':RoomsPerPage' => ADDS_PER_PAGE, ':StartItem' => $start_item, 
':Adddate' => $_POST['ckadddate'],':Location1' => $cklocation1, 
':Location2' => $cklocation2, ':Location3' => $cklocation3, ':Location4' => $cklocation4 
    ); 

가 잘 작동하지만, 내가 꽤 세련된 솔루션이어야합니다.

관련 문제