PHP和MySQL照片投票系统-最佳实现方法
PHP和MySQL照片投票系统-最佳实现方法
我需要建立一个网站,用户可以上传他们的照片,并给其他人的照片投票,类似于Facebook的点赞功能。关于如何存储这些信息,我考虑了以下几种方式:\n1 - 可以在照片记录上使用一个简单的计数器,并在会话中检查用户是否重复投票(投票只是为了娱乐),但在新的会话中,我可以再次对同一张照片进行投票。\n2 - 另一种方式是创建一个表,存储用户ID和照片ID,这样用户就不能重复投票,但我不确定数据库增长是否会成为一个问题,因为表会变得越来越大。\n3 - 在用户记录中使用一个文本字段,存储照片ID的列表,我可以在登录时构建一个会话数组,或者在页面加载时构建一个PHP数组。这可能是最好的方式,但在某些特定情况下,如果需要搜索或计数,可能会遇到问题。LONGTEXT字段的最大长度为4GB,所以我认为我永远不会达到最大长度。
原因:用户想要创建一个类似于Mark Zuck之前创建的Facemash网站的网站,需要一个PHP和MySQL的照片投票系统。
解决方法:可以从http://webtify.com/internet/facemash-clone-script/802/下载一个脚本,然后根据逻辑选择方案#3来实现该脚本。
问题出现的原因是希望在PHP和MySQL的照片投票系统中,找到最佳的方法来实现功能。具体来说,需要解决的问题是如何存储用户喜欢的照片以及照片被哪些用户喜欢的信息。
解决方法是可以在用户记录中使用文本字段来存储逗号或竖线分隔的照片ID,或者在照片记录中使用文本字段来存储逗号或竖线分隔的用户ID。这种方法要比创建关系表更好,因为它更简单、更直接。
以下是一个示例代码,演示如何使用文本字段来存储用户喜欢的照片ID:
// 在用户记录中存储喜欢的照片ID $userLikedPhotos = "1,3,5,7"; // 将用户喜欢的照片ID存储到数据库中 $query = "UPDATE users SET liked_photos = '$userLikedPhotos' WHERE user_id = 1"; $result = mysqli_query($connection, $query);
以下是另一个示例代码,演示如何使用文本字段来存储喜欢某张照片的用户ID:
// 在照片记录中存储喜欢该照片的用户ID $photoLikedByUsers = "1,2,4,6"; // 将喜欢该照片的用户ID存储到数据库中 $query = "UPDATE photos SET liked_by_users = '$photoLikedByUsers' WHERE photo_id = 1"; $result = mysqli_query($connection, $query);
通过使用文本字段来存储喜欢的照片和喜欢某张照片的用户ID,可以避免创建额外的关系表,简化了数据库结构,并且实现了所需的功能。这种方法可以让系统更高效地存储和检索用户喜欢的照片信息。
问题的原因:作者想知道在PHP和MySQL中创建一个照片投票系统的最佳方法是什么。
解决方法:根据问题的背景信息,最佳的解决方法是使用第二个选项。这是因为这种方法最容易检查一个人是否已经投票过了,并且表的大小不会变得太大。即使用户数量达到了100,000个,每个用户投票了1000张照片,总共也只有100,000,000个条目,这并不算太大。因此,选择第二个选项是最佳的解决方案。
此外,作者还在stackoverflow上找到了一个相关的答案,该答案讨论了MySQL数据库在性能开始下降之前能够达到的最大大小。根据答案的评论,这个问题并不适用于作者的情况,但是这个答案仍然是有价值的。
作者得出的结论是,在PHP和MySQL中,使用第二个选项创建照片投票系统是最佳的解决方法。