0

そのため、ユーザーがコンテンツをアップレートおよびダウンレートできるWebサイトの一部に取り組んでいます。これは、評価ごとに1行保存され、賛成の場合は+1、反対の場合は-1になります。

また、合計のupvote - downvotesユーザープロフィールページを作成します。これらの投票の合計は、ユーザー情報のmysqlテーブルに保存されます。

私の問題は、誰かが何かに投票したときに、反対票を言って、ユーザープロファイルの投票の合計値に1を差し引くことです。しかし、ユーザーが考えを変えて、最終的な値が正しくなるように投票を賛成票に変更した場合、実際には2を追加する必要があります(賛成票の-1と他の+1を補うために+1)

$sql = "    
    INSERT INTO `votes`
    (
        `added_by`, 
        `value`,
        `post_id`,
        `ip_created`
    )  VALUES (
        '".$logedInUser['User_ID']."',
        '".$value."',
        '".$this->post_id."',
        '".ip2()."'
    )
    ON DUPLICATE KEY UPDATE `value` = '".$value."'
";
$db->sql_query($sql);

私はそれを行う方法を見つけることができることを知っていますが、それは他のいくつかのクエリを必要とし、それが挿入または更新された場合に戻ることができる方法があると思っています。(クエリがTRUEまたはFALSEのみを返すことはわかっています)

4

2 に答える 2

1

select row_count();直後に行います。

MySQL ドキュメントからhttp://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_row-count

INSERT ... ON DUPLICATE KEY UPDATE ステートメントの場合、影響を受ける行の値は、行が新しい行として挿入される場合は 1、既存の行が更新される場合は 2 です。

ここに例があります。使用しますmysql_affected_rows()-- mysql_* が非推奨であることは知っています。

$mysql = mysql_connect(":/tmp/mysql.sock", "ckim", "");
mysql_select_db("テスト");
mysql_query("my_table が存在する場合はテーブルを削除");
mysql_query("create table my_table(id int primary key, val int)");

$result = mysql_query("insert into my_table values (1,1) on duplicate key update val = 2") or die (__FILE__.':'.__LINE__.": ".mysql_error(. "\n");
echo mysql_affected_rows()."\n";

$result = mysql_query("insert into my_table values (1,1) on duplicate key update val = 2") or die (__FILE__.':'.__LINE__.": ".mysql_error(. "\n");
echo mysql_affected_rows()."\n";

$result = mysql_query("insert into my_table values (2,1) on duplicate key update val = 2") or die (__FILE__.':'.__LINE__.": ".mysql_error(. "\n");
echo mysql_affected_rows()."\n";
mysql_close();

出力は

1
2
1
于 2013-03-19T05:21:37.813 に答える
0

現在のデータ構造に基づいて、ユーザーが賛成票を投じたときにデータのバランスをとるために 2 を追加し、再び反対票を投じたときに 2 を引くというハックの代わりに考えます。これを試して:

  1. 最初に投票を削除する必要があります。
  2. 次に、別の投票を行って変更を行います。
于 2013-03-18T21:56:53.193 に答える