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.")";
하나를 지도 환영합니다.
죄송합니다. 내 질문을 업데이트했습니다. 'action_id'는 고유하지 않은 식별자입니다. – mintaras
@ user1288841 업데이트 내 대답 –
그것은 잘 작동하는 것 같습니다. 고맙습니다. – mintaras