2017-09-26 2 views
0

에 내가 지금처럼 하나의 값 % 쿼리와 같은 SQL을 수행하는 방법을 알고있는 경우와 문 :선택처럼 절은 배열

$sql = "SELECT * FROM Farmers WHERE Available_products LIKE ('%Bananas%')";

하지만 어떻게 내가 경우이 작업을 수행 할 내 LIKE의 검색어 배열에서 오는거야?

$_POST['Products']="Cacaos,Bananas"; 
$array=implode(',', $_POST['Products']); 
$sql = "SELECT * FROM Farmers WHERE Available_products LIKE ('%$array%')"; 

내가 열 Available_Products이 Cacaos 또는 바나나 또는 두

+1

곳 – Akintunde007

+0

'LIKE'%에서 SQL을 사용해보십시오 바나나 'OR LIKE'% Cacaos % '또는'% AnythingElse % '' –

+2

@Akintunde 'IN'은 패턴이 아닌 정확한 일치를 수행합니다. – Barmar

답변

1

정규 표현식에 배열을 변환하고이 들어 데이터베이스의 모든 레코드를 얻으려면 : 예를 들어, 우리는이 같은 배열을 가정 해 봅시다 REGEX 대신 LIKE

$_POST['Products'] = array('Cacaos', 'Bananas'); 
$regex = implode('|', $_POST['Products']); 
$sql = "SELECT * FROM Farmers WHERE Available_products REGEX :regex"; 
$stmt = $pdo->prepare($sql); 
$stmt->bindParam(':regex', $regex); 
$stmt->execute(); 
+0

@Barmar 호기심에서,이 REGEX는 일반적으로 합리적인 수의 OR 문 (배열의 10 개 항목)보다 잘 수행됩니까? 예를 들어'$ where = "어디에서 Available_products는 '%'를 좋아합니다. implode ("%"또는 '%', $ _POST [ 'Products']와 같은 Available_Products). "% '";'어쨌든 색인을 사용하는 데 신경 쓰지 않으니 까? – RToyo

+0

확실히 벤치마킹해야하지만, 거의 같거나 더 좋을 것으로 기대합니다. 둘 다 색인을 사용할 수 없습니다. – Barmar

0

사용하는 당신은 정규 표현식의 도움으로 시도 할 수 있습니다.

$_POST['Products']="Cacaos,Bananas"; 
$array=implode('|', $_POST['Products']); 
$sql = "SELECT * FROM Farmers WHERE 
       Available_products REGEXP". $array;  
+0

이 오류가 있습니다. 치명적 오류 : 잡히지 않은 PDOException : SQLSTATE [42000] : 구문 오류 또는 액세스 위반 : 1064 SQL 구문에 오류가 있습니다. 올바른 구문이 MariaDB 서버 버전에 해당하는지 확인하여 '2 호선 바나나'근처에서 사용하십시오. – NewDeveloper

+0

준비된 구문을 사용하지 않으면 정규 표현식을 둘러싼 따옴표가 필요합니다. – Barmar

0

당신은 또한 같은 것을 수행 할 수 있습니다

// Populating join table.  
CREATE TABLE temp_table_myArray (myArray nvarchar(255)); 
    INSERT INTO temp_table_myArray (myArray) VALUES ('Cacaos'); 
    INSERT INTO temp_table_myArray (myArray) VALUES ('Bananas'); 

// Query using the join table. 
    SELECT F.* 
    FROM Farmers AS F 
     INNER JOIN temp_table_myArray AS T ON (F.Available_products LIKE(CONCAT('%',T.myArray,'%'))); 

을하지만 난 당신의 문제를 해결하기 위해 더 나은 PHP의 방법이 생각 ...