2011-12-21 2 views
2

私は記事の投票システムを持っています。記事は 'stories'テーブルに保存され、すべての投票は 'votes'テーブルに保存されます。 'stories'テーブルのidは 'votes'テーブルのitem_nameに等しい(したがって、各票はitem_nameを持つ記事に関連しています)。「10人のユーザーが好きなときに投稿を承認する」のシステムを見つけることができません

投票総数が10になると、 'stories'テーブルの 'showing'フィールドが '1'の値に更新されます。

ここで私はデータベースに投票を挿入するために使用するクエリです(記事の追加や、 1):ここで

$q = "INSERT INTO {$this->votes_table} (`vote_value`, `item_name`, `ip`) VALUES({$dir}, '{$story_id}', '{$ip}')"; 

私のデータベース構造である:

ストーリーテーブル

enter image description here


投票テーブル

enter image description here

+0

CREATE TEMPORARY TABLE tmp_ids SELECT s.id FROM stories s JOIN votes v ON v.item_name = s.id WHERE s.showing != 1 GROUP BY s.id HAVING SUM(v.vote_value) >= 10; UPDATE stories SET showing = 1 WHERE id IN (SELECT id FROM tmp_ids) 

// EDIT版はこちらトリガーのために良い場合も可能性があります... – DaveRandom

+0

こんにちは、申し訳ありません、私はPHPに新しいです、トリガーは何ですか? – Ilja

+0

item_name [varhcar(255)]にid [int(11)]を格納する代わりに、story_id [int(11)]という名前のVotesに外部キーを作成し、この変更用に変更されたpiotrekkrのSQL文を使用します。 – cfeduke

答えて

3

試してみてください。すべての投票

UPDATE stories s 
SET s.showing = IF((SELECT SUM(vote_value) FROM votes WHERE item_name = ?) >= 10, 1, 0) 
WHERE s.id = ? 
+0

申し訳ありませんが、これにより、投票額が10以上の記事を選択できますが、どのように表示= 1に設定するのですか? – Ilja

+0

私の投稿をもう一度チェックしてください – piotrekkr

+0

今すぐお試しください – Ilja

関連する問題