这是一个理论问题。我正在创建一个应用程序,该应用程序从MySQL DB
下载城市周围的事件列表,并将其显示在RecyclerView
中。
用户应该能够选择一个事件并添加到他们自己感兴趣的事件列表中。此时,我不确定最佳做法是什么。
因此,当用户从RecyclerView
中选择一个事件项目时,最佳解决方案是什么,我只能想到:
方法1:将所选事件添加到List<Event>
,然后将其SharedPreferences
保存为JSON
字符串。稍后将列表上传到在线MySQL
数据库。
还有其他建议吗?
关于查询:
另外,你能给我一个关于如何对数据库进行复杂query
的指针。
我有这些表Events,Accounts, GuestList
。因此,GuestList保存事件和帐户的ID,以便跟踪特定用户想要参加的事件。我猜我不得不使用某种JOIN?
您可以看到,如果我想要显示数据(仅针对请求它的用户的事件信息),我需要首先查询GuestList
表以获取列表事件。然后查询Events
表以获取具有我们刚刚获取的ID的所有事件的信息。一个示例SQL语句是谁?
答案 0 :(得分:1)
当用户从您想要参加的RecyclerView中选择事件时,您应该将查询传递给存储事件的数据库到用户的私人事件列表。最佳方式是异步执行... 您的模型之间似乎有很多关系。 事件,帐户和中间表是GuestList,用于存储模型之间的关系。最佳做法是将其命名为Events_Account,此对话表示这是连接表。 我将展示的示例是在MS SQL上,但它们几乎相同,概念也是一样的。 因此,基于您的模型描述,关系应该看起来像那样。
您可以使用像
这样的基本查询来选择数据当用户想要获取特定事件的信息时,您只需添加另一个where子句,如此
您可以在方法中传递参数,并使用纯查询执行此操作。让我们假装这些是你的变量@CurrentUserId和@Particular事件。您可以将值传递给方法并使用它们来选择项目
这是最糟糕的做法 - 将其用作纯查询。 PHP作为其他语言正在为您提供射击自己的先决条件。在代码中使用纯db查询并中继用户将正确使用应用程序是完全错误的。这样,用户可以简单地发送SQL注入并转储数据库。这里是ORM / Object Relational Mapping / Like EntityFramework for .NET。 PHP等价物是Propelorm。它映射您的数据库,并使用流利的语法使您可以非常轻松地访问该对象。
查询以及使用起来非常简单并且使您免于SQL注入的ORM都将被转换为SQL语言。他们将在SQL中执行的查询将接近图片上的查询,但对于人类来说有点丑陋。不要担心查询它将是非常事实,因为此操作在数据库级别执行,并且它们将非常快。
我希望这对你有用而且足以解决你的理论问题