2011-01-05 4 views
2

mysql 쿼리를 생성하는 데 필요한 여러 가지 필터와 검색 기능이 있습니다. 제가 사용할 수있는 수업이나 도서관이 있는지 궁금합니다.MySQL 쿼리 생성?

예를 들어 날짜가있는 이메일을 입력하면 WHERE email='email' AND date` = 'date'를 SQL 쿼리 중간에 추가해야합니다. 그러나 그들이 도시에 들어가면 나는 그것을 추가해야합니다.

나는 배열에서 검색하고 나서 AND에 의해 내포 할 필요가있는 모든 것을 넣었습니까? 누구든지 더 좋은 제안이 있습니까?

+0

그럴 수 있습니다. key => 값을 사용하여 field => searchcriteria를 설정할 수 있습니다. 장기적으로 볼 때 얼마나 많은 혜택을 누릴 지 확신 할 수 없지만 (LIKE 또는 비교 에서처럼) 복잡한 요구가 발생하면 유지 관리하는 것이 귀찮을 수 있습니다. 이 라이브러리 중 일부가 내장되어있는 라이브러리가있을 수 있습니다. – clifgriffin

+0

가능한 [SQL Builder for PHP, JOIN 지원?] (http://stackoverflow.com/questions/216138/sql-builder-for) -php-with-join-support) – Gordon

답변

1

나는 그런 종류의 일에 Zend_Db을 사용합니다. 사용하여 빠른 예를 들어, Zend_Db_Select :

$select = $db->select()->from("users"); 
if($email) { 
    $select->where('email = ?', $email); 
} 
if($date) { 
    $select->where('date = ?', $date); 
} 
// etc 

// show query 
// will output something like SELECT * from `users` WHERE email = 'email' AND date = 'date' 
print_r($select->__toString()); 

// execute 
$results = $db->fetchAll($select); 
print_r($results); 
+1

+1 Zend_Db의 경우 Zend_Db_Select는 완전한 젠드 프레임 워크없이 사용할 수 있으며 훌륭한 쿼리 빌더입니다. – regilero

0

나는 매우 자주 쿼리 조건문

$a[] = "email = 'email'"; 
$a[] = "firstname LIKE '%firstname%'"; 
$a[] = "date BETWEEN 'date_a' AND 'date_d'"; 
$a[] = "id > 123"; 

$query = ... " WHERE " implode(' AND ', $a); 
0

내가 같은 배열로 주어진 모든 데이터를 추가 가고 싶어 가장 유연한 솔루션이기 때문에 배열 솔루션을 사용 이 :

$args = array(
    'email' => '[email protected]', 
    'date' => '2011-01-05', 
    'city' => 'MyTown' 
); 

그런 다음 바로 검색 키와 값을 추가 그것을 통해 foreach는

$SQL = "WHERE "; 
foreach($args as $key => $val) { 
    $SQL .= $key."='".$val."'"; 
    //And add the AND or OR where needed 
} 
0

일반적인 접근 방식은 다른 쿼리 파트를 포함 할 배열을 만들고 필터링 할 항목에 따라 요소를 추가하는 것입니다. 예 :

<?php 

$sql_parts = array(
    'select' => array(), 
    'from' => array(), 
    'where' => array() 
); 

if ($filter_by_name != ''){ 
    $sql_parts['select'][] = 'u.*'; 
    $sql_parts['from'][] = 'users AS u'; 
    $sql_parts['where'][] = "u.name = '".mysql_real_escape_string($filter_by_name)."'"; 
} 

if ($filter_by_surname != ''){ 
    $sql_parts['select'][] = 'u.*'; 
    $sql_parts['from'][] = 'users AS u'; 
    $sql_parts['where'][] = "u.surname = '".mysql_real_escape_string($filter_by_surname)."'"; 
} 

//filter by data from another table 
if ($filter_by_city_name != ''){ 
    $sql_parts['select'][] = 'u.*, c.*'; 
    $sql_parts['from'][] = 'cities AS c'; 
    $sql_parts['from'][] = 'users AS u'; 
    $sql_parts['where'][] = "c.cityname = '".mysql_real_escape_string($filter_by_city_name)."'"; 
    $sql_parts['where'][] = "c.id = u.cityid"; 
} 

$sql_parts['select'] = array_unique($sql_parts['select']); 
$sql_parts['from'] = array_unique($sql_parts['from']); 
$sql_parts['where'] = array_unique($sql_parts['where']); 

$sql_query = "SELECT ".implode(", ", $sql_parts['select']). 
       "FROM ".implode(", ", $sql_parts['from']). 
       "WHERE ".implode(" AND ", $sql_parts['where']); 
?>