何度も頭を悩ませた後、このクエリが機能するようになりましたが、見た目が悪く、実行すると遅く感じます。
特定のユーザーがそのアイテムに「はい」と言った場合に入力される「アイテム」というフィールドを持つ UserTable というテーブルがあります。そのインスタンスの UserTable にそのアイテムの行を追加したいだけです。つまり、テーブルに多くの user_ID/Item/'no' 関係を持たせたくありません。user_ID/Item/'yes' だけです。反応。
ユーザーにデータセット全体を表示し、設定を変更してから更新を押すことができるコードを作成しました。それらが更新されると、$checkbox と呼ばれる配列が出力されます。これには、「はい」にチェックを入れた項目番号 (例: "1"、"3"、"6") が含まれます。何もチェックしない場合、$checkbox は "" に設定されます。
関連するコードは次のとおりです。私が言うように、非常に扱いにくく、FOREACH 内に WHILE があり、2 つの検証 IF ステートメントがあります。ループの 1 つ (または両方!) を取り除き、SELECT タイプのコマンドに置き換えることはできますか?
foreach($checkbox as $value)
{if($value!="") {
$sql= "SELECT count(Item) as row_exists
FROM UserTable
WHERE Item = '$value' and
User_ID = '$current_user_id'";
$result = mysqli_query($mysqli,$sql) or die(mysqli_error($mysqli));
while ($iteminfo = mysqli_fetch_array($result)) {
If ((int)$iteminfo['row_exists']==0) {
$sql = "INSERT INTO UserTable
(User_ID,Item,Date) VALUES
('$current_user_id','$value',now() )";
$add_new_row = mysqli_query($mysqli,$sql) or die(mysqli_error($mysqli));
}
}
}
}
よろしくお願いします。