2012-11-05 5 views
0

나는 다음과 같은 배열을 가지고 :쿼리에서 배열의 값을 포함하는 방법

$rqt="SELECT * FROM `client_gestion_compte` WHERE `id_company`='".$societe['id']."' AND `id_gestionnaire_client`='".$_SESSION['id']."'" ; 
$res=mysql_query($rqt); 

$values = array(); 
while($donnees=mysql_fetch_assoc($res)) 
{ 
    $values[] = $donnees['compte'] ; 
} 

나는 데이터베이스에서 검색 쿼리를 만들기 위해이 배열의 값을 사용하고 싶습니다. 배열의 모든 값을 사용해야하지만 문제는 배열에 얼마나 많은 항목이 있는지 알 수 없기 때문에 수동으로이 기준이 $ 값을 사용하는 등의 작업을 수행 할 수 없습니다.

So 나는 이것 같이 시도했다.

`$sql="SELECT * FROM `debiteur` INNER JOIN `creance` ON `creance`.`n_doss` = `debiteur`.`n_doss` WHERE `creance`.`id_company`=".$societe['id']." AND `debiteur`.`nom` LIKE '%".$_GET['s']."%' AND `creance`.`code_client` LIKE '%".$values."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`prenom` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`raison_sociale` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`siret` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`adresse` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`adresse2` LIKE '%".$_GET['s']."%' Or `debiteur`.`ville` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`code_postal` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`tel` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`tel2` LIKE '%".$_GET['s']."%' Or `debiteur`.`fax` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`fax2` LIKE '%".$_GET['s']."%' Or `debiteur`.`gsm` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`gsm2` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`e_mail` LIKE '%".$_GET['s']."%' GROUP BY `creance`.`n_doss` "; 

문제는 내가 배열의 모든 사용자 정의 값을 검색하는 방법을 모를 때문에이 라인 creance.code_client LIKE '%".$values."%'

에뿐만 아니라 같은 하나 개의 값이 값으로 [1] 예를 들어.

+1

삽입 무작위 호언 장담을 필요로 -에 스위치를 [PDO] (http://php.net/manual/en/book.pdo.php)를 참조하십시오. – moonwave99

+0

@ moonwave99 또는 mysqli_, 두 가지 옵션이있는 이유는 무엇입니까? –

답변

1
$sql = "SELECT * FROM `debiteur` 
INNER JOIN `creance` ON `creance`.`n_doss` = `debiteur`.`n_doss` 
WHERE {...} 
AND (`creance`.`code_client` LIKE '%" . implode("%' OR `creance`.`code_client` LIKE '%", $values) . "%') 
{...}"; 
1

는 현재`* mysql_로`에 대해, 배열의 모든 요소를 ​​통과하는 foreach 루프 또는 implode를 사용하는 기능을

$sql="SELECT * FROM `debiteur` INNER JOIN `creance` ON `creance`.`n_doss` = `debiteur`.`n_doss` WHERE `creance`.`id_company`=".$societe['id']." AND `debiteur`.`nom` LIKE '%".$_GET['s']."%' AND "; 
foreach($values as $v) { 
    $sql .= `creance`.`code_client` LIKE '%".$v."%' OR " ; 
} 

$sql .= " `creance`.`id_company`=".$societe['id']." AND `debiteur`.`prenom` LIKE '%".$_GET['s']."%' OR `creance`.`id_company`=".$societe['id']." AND `debiteur`.`....."; 
+0

나는 이해하지만, 쿼리는 어떨까요? 세 번로드하거나 그냥 mysql_query ($ sql)을 만들 때 첫 번째 결과 또는 마지막을 가져 옵니까? –

+1

그것은'$ values' 배열의 모든 값을 사용하고'OR'과 연결합니다. 따라서 결과 세트 전체를 얻을 수 있습니다. 그건 그렇고,'implode' (Gustonez이 대답 한대로)를 사용하는 것이 루프를 피하는 더 좋은 해결책입니다. –

0
$rqt="SELECT * FROM `client_gestion_compte` WHERE `id_company`='".$societe['id']."' AND `id_gestionnaire_client`='".$_SESSION['id']."'" ; 
$res=mysql_query($rqt); 

$values = array(); 
while($donnees=mysql_fetch_assoc($res)) 
{ 
    $values[] = $donnees['compte'] ; 
} 

$value_query=implode(",",$values); 

//Place it like this in your query 

creance.code_client IN ('".$value_query."') 
관련 문제