2015-07-16 2 views
3

Я сохраненная различные функции разделенных запятых в базе данных показаны на рисунке этого изображения: enter image description here когда я выбираю один признак, как этогопоиск строки в ячейке

SELECT rt.*, rb.*, rf.*, rs.* 
FROM business rt 
INNER JOIN business_company_info rb 
ON rt.id=rb.business_id 
INNER JOIN business_attributes rf 
ON rt.id=rf.business_id 
INNER JOIN business_basic_info rs 
ON rt.id=rs.business_id 
WHERE business_keyword LIKE '%3000%' AND features LIKE '%feature3%' and 
status= 0 ORDER BY rt.id DESC 

данных извлекаются из базы данных, но когда у меня есть много функций, которые он не ищет. Это мой запрос для многих функций выбраны

SELECT rt.*, rb.*, rf.*, rs.* 
FROM business rt 
INNER JOIN business_company_info rb 
ON rt.id=rb.business_id 
INNER JOIN business_attributes rf 
ON rt.id=rf.business_id 
INNER JOIN business_basic_info rs 
ON rt.id=rs.business_id 
WHERE business_keyword LIKE '%3000%' AND features LIKE'%feature3,feature2,feature4%' and 
status= 0 ORDER BY rt.id DESC 

Это мой код.

if(isset($_POST['advance_search']) && !empty($_POST['advance_search']) && ((isset($_POST['area']) && !empty($_POST['area'])) || 
          (isset($_POST['salary']) && !empty($_POST['salary'])) || (isset($_POST['industry']) && !empty($_POST['industry'])) || (isset($_POST['jobtype']) && !empty($_POST['jobtype'])) 
          || (isset($_POST['keyword']) && !empty($_POST['keyword'])) || (isset($_POST['empnum']) && !empty($_POST['empnum'])) || (isset($_POST['year']) && !empty($_POST['year'])) 
          || (isset($_POST['features']) && !empty($_POST['features'])) || (isset($_POST['employ_status']) && !empty($_POST['area'])) 
          )){ 
           //echo '<pre>';print_r($_POST);exit; 
           $area = $_POST['area']; 
           $salary = $_POST['salary']; 
           $industry = $_POST['industry']; 
           $jobtype = $_POST['jobtype']; 
           $keyword = $_POST['keyword']; 
           $empnum = $_POST['empnum']; 
           $year = $_POST['year']; 

           //echo '<pre>';print_r($ids);print_r($salary);print_r($keyword);print_r($jobtype);print_r($industry);exit; 
           //echo '<pre>';print_r($area);print_r($salary);print_r($industry);print_r($jobtype);print_r($keyword);print_r($empnum);print_r($year);exit; 
           /*if(isset($_POST['genre'])){ 
            $genres_search = implode(',', $_POST['genre']); 
           }*/ 
           if(isset($_POST['employ_status'])){ 
            $employment_search = implode(',', $_POST['employ_status']); 
           } 
           if(isset($_POST['features'])){ 
            $features_search = implode(',', $_POST['features']); 
           } 

           $conditions = array(); 
           if (!empty($area)){ 
            $conditions[] = "business_location LIKE '%$area%'"; 
           } 
           if (!empty($salary)){ 
            $conditions[] = "business_salary_rule LIKE '%$salary%'"; 
           } 
           if (!empty($keyword)){ 
            $conditions[] = "business_keyword LIKE '%$keyword%'"; 
           } 
           if (!empty($jobtype)){ 
            $conditions[] = "business_job_type >= '$jobtype'"; 
           } 
           if (!empty($industry)){ 
            $conditions[] = "business_industries LIKE '%$industry%'"; 
           } 
           if (!empty($empnum)){ 
            $conditions[] = "employees_number LIKE '%$empnum%'"; 
           } 
           if (!empty($year)){ 
            $conditions[] = "established_year LIKE '%$year%'"; 
           } 
           if (!empty($employment_search)){ 
            $conditions[] = "employment_status LIKE '%$employment_search%'"; 
           } 
           if (!empty($features_search)){ 
           $conditions[] = "features LIKE '%$features_search%'"; 
           } 

           $sql = "SELECT rt.*, rb.*, rf.*, rs.* 
            FROM business rt 
            INNER JOIN business_company_info rb 
            ON rt.id=rb.business_id 
            INNER JOIN business_attributes rf 
            ON rt.id=rf.business_id 
            INNER JOIN business_basic_info rs 
            ON rt.id=rs.business_id 
            WHERE ". implode(' AND ', $conditions) . " and 
            status= 0 ORDER BY rt.id DESC"; echo '<pre>';print_r($sql);exit; 

          } 

Любая помощь будет оценена по достоинству. Спасибо

+0

и вопрос есть? – RamRaider

+0

, пожалуйста, отредактируйте свой вопрос, чтобы ваш код был более читаемым, а ваш вопрос более явным – John

ответ

1

Вы можете взорвать функцию $ и сохранить ее в массиве. Что-то вроде этого.

if (!empty($features_search)) 
{ 
    $feature_array= explode(",", $features_search); 
    for each($feature_array as $key => $feature) 
    { 
     $conditions[] = "features LIKE '%$feature%'"; 
    } 
} 

надеюсь, что это поможет.

2

Если вы хотите найти совпадение всех функций, то первую часть ИНЕК должен быть:

WHERE business_keyword LIKE '%3000%' AND (features LIKE '%feature3%' AND features LIKE '%feature2%' AND features LIKE '%feature4%') ..... 

если вы хотите матч на любом из функций используйте

WHERE business_keyword LIKE '%3000%' AND (features LIKE '%feature3%' OR features LIKE '%feature2%' OR features LIKE '%feature4%') ..... 
1

если данные не статичны, и в настоящее время извлекается из базы данных, то попробуйте эту

ГДЕ business_keyword LIKE '% 3000%' AND (функции, такие как '% особенность%') .....

попробуйте это.

Смежные вопросы