2013-08-26 4 views
2

데이터 테이블에서 여러 레코드를 삭제하려고합니다. 문제는 예금의 3 개 레코드를 제거해야하는 경우 'Deposit'키워드뿐만 아니라 'Balance'키워드를 찾아야한다는 것입니다.MySQL - 중첩 된 조건

TABLE Report: 
-------------------------------------------------------------------------------------- 
| report_id action_id action_name balance received given item_name total| 
-------------------------------------------------------------------------------------- 
| 1   1  Balance   0  10  0  Gold   10 | 
| 2   2  Deposit   10  10  0  Gold   20 | 
| 3   3  Deposit   20  10  0  Gold   30 | 
| 4   4  Balance   0  5  0  Silver  5 | 
| 5   5  Deposit   5  5  0  Silver  10 | 
| 6   6  Deposit   10  5  0  Silver  15 | 
| 7   1  Withdraw   30  0  10  Gold   20 | 
    ..  ..... 

나는 이러한 코드 조각이 :

내가 뭘하려고 오전
... 
// Empty array for keys (action_id, action_name) 
$tempArray = array(); 

// Generates string like: '(?,"Deposit"),(?,"Deposit")' 
$var = implode(',', array_fill(0,count($tempArray), '(?,"Deposit")')); 

// Generates query like: DELETE FROM Report WHERE (action_id, action_name) IN ((?,"Deposit"),(?,"Deposit")) 
$sql = "DELETE FROM Report WHERE (action_id, action_name) IN (".$var.")"; 

try{ 

$db = getConnection(); 
$stmt = $db->prepare($sql); 
$result = $stmt->execute(array_values($tempArray)); 
... 

이 작동 할 수

... 
// Generate string like: '(?,"Deposit" OR "Balance"),(?,"Deposit" OR "Balance")' 
$var = implode(',', array_fill(0,count($tempArray), '(?,"Deposit" OR "Balance")')); 

// Generate query like: DELETE FROM Report WHERE (action_id, action_name) IN ((?,"Deposit" OR "Balance"),(?,"Deposit" OR "Balance")) 
$sql = "DELETE FROM Report WHERE (action_id, action_name) IN (".$var.")"; 
나는 어쩌면 생각

을 :

... 
// Generate string like: '(?,"Deposit","Balance"),(?,"Deposit","Balance")' 
$var = implode(',', array_fill(0,count($tempArray), '(?,"Deposit","Balance")')); 

// Generate query like: DELETE FROM Report WHERE (action_id, action_name,action_name) IN ((?,"Deposit","Balance"),(?,"Deposit","Balance")) 
$sql = "DELETE FROM Report WHERE (action_id, action_name,action_name) IN (".$var.")"; 

하나를 지도 환영합니다.

답변

2

편집

지금은 action_id이 고유하지 것이 분명하기 때문에 내 대답을 업데이트.

은이 같은 쿼리를 수정할 수 있습니다 무명에 대한

$var = implode(',', array_fill(0, count($tempArray), '?')); 
$sql = "DELETE FROM Report WHERE action_id IN ($var) ". 
     "AND action_name IN ('Deposit', 'Balance')"; 

$db = getConnection(); 
$stmt = $db->prepare($sql); 
$result = $stmt->execute(array_values($tempArray)); 
+0

죄송합니다. 내 질문을 업데이트했습니다. 'action_id'는 고유하지 않은 식별자입니다. – mintaras

+0

@ user1288841 업데이트 내 대답 –

+0

그것은 잘 작동하는 것 같습니다. 고맙습니다. – mintaras