用户下载所有活动,然后收藏一些

时间:2016-02-28 19:46:35

标签: android sql android-recyclerview

这是一个理论问题。我正在创建一个应用程序,该应用程序从MySQL DB下载城市周围的事件列表,并将其显示在RecyclerView中。

用户应该能够选择一个事件并添加到他们自己感兴趣的事件列表中。此时,我不确定最佳做法是什么。

因此,当用户从RecyclerView中选择一个事件项目时,最佳解决方案是什么,我只能想到:

方法1:将所选事件添加到List<Event>,然后将其SharedPreferences保存为JSON字符串。稍后将列表上传到在线MySQL数据库。

还有其他建议吗?

关于查询:

另外,你能给我一个关于如何对数据库进行复杂query的指针。

我有这些表Events,Accounts, GuestList。因此,GuestList保存事件和帐户的ID,以便跟踪特定用户想要参加的事件。我猜我不得不使用某种JOIN?

您可以看到,如果我想要显示数据(仅针对请求它的用户的事件信息),我需要首先查询GuestList表以获取列表事件。然后查询Events表以获取具有我们刚刚获取的ID的所有事件的信息。一个示例SQL语句是谁?

1 个答案:

答案 0 :(得分:1)

当用户从您想要参加的RecyclerView中选择事件时,您应该将查询传递给存储事件的数据库到用户的私人事件列表。最佳方式是异步执行... 您的模型之间似乎有很多关系。 事件,帐户和中间表是GuestList,用于存储模型之间的关系。最佳做法是将其命名为Events_Account,此对话表示这是连接表。 我将展示的示例是在MS SQL上,但它们几乎相同,概念也是一样的。 因此,基于您的模型描述,关系应该看起来像那样。

DatabaseRelation

您可以使用像

这样的基本查询来选择数据

SQL Query

当用户想要获取特定事件的信息时,您只需添加另一个where子句,如此

WithTwoWhereClauses

您可以在方法中传递参数,并使用纯查询执行此操作。让我们假装这些是你的变量@CurrentUserId和@Particular事件。您可以将值传递给方法并使用它们来选择项目

WorstPractice

这是最糟糕的做法 - 将其用作纯查询。 PHP作为其他语言正在为您提供射击自己的先决条件。在代码中使用纯db查询并中继用户将正确使用应用程序是完全错误的。这样,用户可以简单地发送SQL注入并转储数据库。这里是ORM / Object Relational Mapping / Like EntityFramework for .NET。 PHP等价物是Propelorm。它映射您的数据库,并使用流利的语法使您可以非常轻松地访问该对象。

查询以及使用起来非常简单并且使您免于SQL注入的ORM都将被转换为SQL语言。他们将在SQL中执行的查询将接近图片上的查询,但对于人类来说有点丑陋。不要担心查询它将是非常事实,因为此操作在数据库级别执行,并且它们将非常快。

我希望这对你有用而且足以解决你的理论问题