【发布时间】:2013-11-19 13:03:15
【问题描述】:
我正在使用 Python (Flask) 开发一个 Web 应用程序,它基本上以随机顺序显示来自 PostgreSQL 数据库(通过 Flask-SQLAlchemy)的用户信息,每组信息都显示在一个页面上。点击“下一步”按钮将通过将页面上的所有数据替换为新数据,将用户引导至下一组数据,依此类推。
我的难题在于使演示变得真正随机 - 通过记住用户所看到的内容而不是再次向他们显示那些已经看过的数据集,不会向用户显示相同的信息两次。
该网站没有用户系统,当他们关闭选项卡/窗口或导航离开时,应该忘记“已经看到”的数据集。
我还应该补充一点,总的来说,我是 SQL 的新手。
最好的方法是什么?
【问题讨论】:
-
@MarkRichman - 我不认为这是重复的,因为我希望获得用户尚未看到的随机行,而不仅仅是任何随机行。我还使用 SQLAlchemy,而不是实际的 SQL,来执行查询
-
我的难题在于使演示变得真正随机 - 不会通过记住用户所看到的内容来重复向用户显示相同的信息,并且不会再次向他们显示那些已经看过的数据集。 i> 只是一个挑剔:根据定义,您这样做会使您的数据变得更少随机。也许这就是你需要你的应用程序做的事情,但是当你说你试图让事情 真正 随机然后描述一些 less 随机的东西时,你会让人失望不仅仅是挑选任何元素。
-
正如@MarkHildreth 所说,您正在寻找的并不是真正随机的。那么我要问的是,您是否需要为您的用例提供如此复杂的解决方案。首先,您如何索引数据?如果它是从 1 开始的通常的自动索引,您可以只存储最新的(也就是最高的索引),并在该范围内做一个随机数。示例:
random_id = str(random.randint(1, latest_id))然后SELECT * FROM data WHERE id = random_id。这比“按兰德订购”要快一点。相信你可以在flask启动的时候查询到最新的id,存入内存,需要的时候再更新。 -
下一个问题是您是否需要记住用户已经看到的内容。如果您的数据集足够大,您可能不必担心存储用户已经看到的数据。例如,如果您有超过 1,000 个项目,而您的用户在一次访问中平均查看 50 个,那么他们在每次下次点击时看到重复的最高机会小于 5%。如果您的某些用户浏览的次数要多得多,那么在这些情况下,您还可以考虑给他们不同的顺序来浏览数据(例如最新、最旧、最受欢迎等)。
标签: python sql flask flask-sqlalchemy