我从一个应用程序收到了这些数据。我的参数列表:
- catids=1,2,3
- subscriptions=1,1,0[0=按此顺序保持订阅和1=取消订阅catids]
- appuser_id=XXX
现在我必须根据收到的数据更新我的订阅表。模式如下:
--cat_id--appuser_id
1 | 10 |
2 | 10 |
3 | 10 |
4 | 20 |
5 | 20 |
---------------------
那么,考虑到查询性能,我该如何做到这一点呢?我能想到的方法是:
- 获取值为1的所有订阅
- 找出步骤1中找到的值的相应catid
- 从表中删除这些条目
我只能走到第一步。我想不出一种方法来将步骤1中找到的条目与它们各自的catid进行匹配。
$cat = '1,2,3';
$subs = '1,1,0';
$catA = explode(',',$cat);
$subsA = explode(',',$subs);
$deleteSubList = array();
foreach($subsA as $v){
if($v == 1){
array_push($deleteSubList,$v);
}
}
print_r($deleteSubList);
这给了我Array ( [0] => 1 [1] => 1 )
。我如何知道它属于$catA
数组中的一个类别?
您需要记住您的密钥:
foreach($subsA as $key => $v){
if($v == 1){
$deleteSublist[$key] = $v;
}
}
然后$deleteSublist将是一个数组,它将数组的所有id作为密钥。
foreach($deleteSublist as $key => $value) {
// Delete $cat[$key]
}
$cat = '1,3,3';
$subs = '1,1,0';
$catA = explode(',', $cat);
$subsA = explode(',', $subs);
for ($i = 0; $i <= count($subsA); $i++) {
if ($subsA[$i] == 1) {
$deleteSubList[$catA[$i]] = $subsA[$i];
}
}
print_r($deleteSubList);
要删除:
foreach($deleteSubList as $key => $value) {
mysql_query("DELETE FROM tbl WHERE cat_id = " . $key);
}
这里有一种更简单的方法
$deleteSubList = array_filter( array_combine( $catA, $subsA ) );
$sql = sprintf( "delete from table where cat_id in(%s) and appuser_id=%s", implode( ',' array_keys( $deleteSubList ) ), $appuser_id );