2

私は mysql が初めてで、助けが必要です。

変数に次の値があります: 46,30,22. 46,30,22これが save_user_id フィールドから存在することを確認したい。挿入されない数値(値)が存在します。

私の現在のテーブル: t5zgu_saved_user

id  user_id  saved_user_id
350  42      46
354  42      30
353  42      70
351  42      288
330  57      66
334  57      67
324  57      59

私はこのように結果が欲しい:

id  user_id  saved_user_id
355  42      22
350  42      46
354  42      30
353  42      70
351  42      288
330  57      66
334  57      67
324  57      59

私の結果をチェックインすると、1 つのレコードのみが追加されます。

id  user_id  saved_user_id

355  42      22

アイデアや提案はありますか?ありがとう。

4

3 に答える 3

0

クエリ

INSERT INTO t5zgu_saved_user (user_id, saved_user_id)
SELECT {$user_id}, h.saved_user_id
FROM ({$str_union}) AS h
LEFT JOIN t5zgu_saved_user AS h2
ON h.saved_user_id = h2.saved_user_id
    # AND h2.user_id = {$user_id}
WHERE h2.id IS NULL

あなたがやろうとしていることは、おそらくUNIQUEキーとで行うこともできますINSERT IGNORE。その場合、重複する値の挿入に失敗します。save_user_id一意のperが必要な場合は、最後の 2 行目のコメントを外しますuser_id

事前作業

設定$user_id

$arr_values = array(46, 30, 22);
$arr_union = array();
for($i = 0; $i < count($arr_values); $i++)
    if ( ! $i)
        $arr_union[] = "SELECT {$arr_values[$i]} AS saved_user_id";
    else $arr_union[] = "SELECT {$arr_values[$i]}";

$str_union = implode(' UNION ', $arr_union);

対象:FROM (SELECT 46 AS saved_user_id UNION SELECT 30 UNION SELECT 22) AS h
対象:FROM ({$str_union}) AS h

参考文献

于 2013-08-27T11:52:41.300 に答える
0
CREATE OR REPLACE TRIGGER trigger_change
BEFORE  INSERT  tablename
FOR EACH ROW
DECLARE
new_save_user_id number;
cursor c1 is select save_user_id from tablename 
BEGIN
for var in c1
loop
if (:new.save_user_id  NOT IN var.save_user_id)then
insert query
end loop; 
END;
于 2013-08-27T12:01:06.190 に答える
0

save_user_id フィールドを主キーとして使用します。それ以外の場合は、データ (既存の save_user_id を使用) が存在するかどうかにかかわらず、コードで既存のデータを確認できます。存在する場合はそのデータをブロックすることを意味し、そうでない場合はデータベースに保存します。さまざまな選択クエリを使用して値を取得します。たとえば、
select saved_user_id from t5zgu_saved_user where saved_user_id = "Your Input";
データがIDとともにすでに存在する場合は戻り、そうでない場合はnullの結果を返します.nullの結果を取得した場合は、それ以外の場合は例外を介してDBに入力することを意味します。

于 2013-08-27T12:01:44.697 に答える