1

このデータをアプリから受け取りました。私のパラメータリスト:

  1. catids = 1、2、3
  2. サブスクリプション=1、1、0 [0 =サブスクライブを維持し、1=この順序でcatidのサブスクライブを解除します]
  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配列のカテゴリの1つに属していることをどのように知ることができますか?

4

3 に答える 3

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 に答える
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 に答える
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 に答える