PHP ve MySQL Derecelendirme Sistemi

3 Cevap php

Biz stackoverflow internet sitesine bakarsanız biz oy var. Ama soru olarak kim saklamak için Bestway ne olduğunu ve kim değil. Sağlar da daha bu basitleştirmek ve biz sadece kadar oy söylüyorlar, ve biz sadece kadar oy kaldırabilirsiniz.

Böyle şeklinde olması tablo olan düşünüyordum

question - Id(INT) | userId(INT) | title(TEXT) | vote(INT) | ratedBy(TEXT)

Tasarımda gerisi kendiliğinden explanitory ama ratedBy Kullanıcılar bir Virgülle Ayrılmış No değerleridir.

Ben ratedBy okumak ve userId Kullanıcı açmış akım ile karşılaştırmak için düşünüyordum. O var dosent eğer ratedBy o aksi takdirde onun oy kaldırmak, Yukarı oy verebilirsiniz. Sırayla ratedBy adlı değeri kaldıracak olan

3 Cevap

Ben başka bir tablo "oy" daha iyi yapmak için düşünüyorum. Kullanıcılar ve oy arasındaki ilişki, bu nedenle yeni bir tablo oluşturulmalıdır, n n edilir. Bu gibi bir şey olmalıdır:

question id (int) | user id (int) | permanent (bool) | timestamp (datetime)

Permanent field can be used to make votes stay after a given time, as SO does.
Other fields may be added according to desired features. As each row will take at least 16B, you can have up to 250M rows in the table before the table uses 4GB (fat32 limit if there is one archive per table, which is the case for MyISAM and InnoDB).
Also, as Matthew Scharley points out in a comment, don't load all votes at once into memory (as fetching all the table in a resultset). You can always use LIMIT clause to narrow your query results.

Yeni bir tablo:

Makale numarası | Kullanıcı ID | Değerlendirmesi

, Upvote belirten Makale numarası ve Kullanıcı Kimliği kompozit anahtar oluşturan ve değerlendirme 1 nerede olacağını -1 kaldırılan bir oy için bir DOWNVote ve 0 için (ya da sadece satır kaldırmak).

I believe your design won't be able to scale for large numbers of voters. The typical thing to do is to create to tables

Table 1: question - Id(INT) | userId(INT) | title(TEXT)
Table 2: question - ID(INT) | vote(INT) | ratedBy(TEXT)

Sonra böyle bir sorgu ile oy sayabilirsiniz:

SELECT t1.question_Id, t1.userId, t1.title, t2.sum(vote)
FROM table1 t1
LEFT JOIN table2 t2 ON t1.question_id = t2.question_id