1

我从一个应用程序收到了这些数据。我的参数列表:

  1. catids = 1, 2, 3
  2. 订阅 = 1, 1, 0 [ 0 = 保持订阅,1 = 按此顺序取消订阅 catids]
  3. appuser_id = XXX

现在我必须根据收到的数据更新我的订阅表。架构如下:

--cat_id--appuser_id
  1     |     10    |
  2     |     10    |
  3     |     10    |   
  4     |     20    |
  5     |     20    |
---------------------

那么考虑到查询性能,我怎样才能巧妙地做到这一点呢?我能想到的方法是:

  1. 获取所有值为 1 的订阅。
  2. 找出步骤 1 中找到的值的相应 catid。
  3. 从表中删除这些条目。

我只能达到第 1 步。我想不出一种方法来匹配在步骤 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数组中的类别之一?

4

3 回答 3

1

您需要记住您的密钥:

foreach($subsA as $key => $v){
        if($v == 1){
            $deleteSublist[$key] = $v;
        }
    }

然后 $deleteSublist 将是一个数组,其中包含数组的所有 id 作为键。

foreach($deleteSublist as $key => $value) {
   // Delete $cat[$key]
}
于 2013-02-17T17:22:11.260 回答
1
$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);
}
于 2013-02-17T17:31:17.360 回答
0

这是一种更简单的方法

$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 );
于 2013-02-17T17:42:49.990 回答