我有一个Android应用程序从 mysql db 中提取信息并将其显示在列表中。每个列表项都有一个收藏夹按钮,在单击时会使用用户名和列表项更新数据库。
我可以使用关键字和外键获取所有用户收藏夹。 我想要实现的是当用户重新登录应用程序并滚动查找可用项目时,他已经可以看到哪些项目被标记为收藏,而无需访问他的收藏页面。
因此,例如,当您在Facebook页面中滚动时,您已经可以看到自己喜欢哪些帖子。
我怎样才能做到这一点?
第一张表
|------------------|--------------|----|-------|
| Column | Type |Null|Default
|------------------|--------------|----|-------|
| //**id**// | int(11) | No |
| car_vendor | varchar(20) | No |
| car_model | varchar(20) | No |
| car_petro | varchar(10) | No |
| car_transmition | varchar(10) | No |
| car_hand | int(11) | No |
| car_spedometer | varchar(7) | No |
| car_engine_vol | varchar(4) | No |
| car_category | int(11) | No |
| car_post_date | date | No |
第二张表
|----------------|------------|----|
| Column | Type |Null| Default
|----------------|------------|----|
| //**id**// | int(11) | No |
| username | varchar(20)| No |
| favorites_id | int(11) | No | <<< foreign key points to ID on first table
答案 0 :(得分:1)
您可以向数据库询问该信息,
当您获得所有可以执行LEFT JOIN的产品列表时,可用于将产品(如果喜欢)连接到用户。你可以这样做。
SELECT CAR_VENDOR,
A.CAR_MODEL,
A.CAR_PETRO,
A.CAR_TRANSMITION,
A.CAR_HAND,
A.CAR_SPEDOMETER,
A.CAR_ENGINE_VOL,
A.CAR_CATEGORY,
A.CAR_POST_DATE,
B.USERNAME
FROM TABLE_ONE AS A
LEFT JOIN TABLE_TWO AS B ON B.FAVORITES_ID = A.ID
AND B.USERNAME = "actual user username"
这个查询应该做的工作,我没有测试它,但你可以把它作为一个想法从哪里开始
只有具有首选项的对象才应填写用户名字段
编辑 --------------------------------------- ---------
以OP提出的案例为例,我们有:
行为很简单,我们想要一些像社会一样的人,可以在这个地方投资#34;一辆车,显然我们不希望同一辆车在同一辆车上多次投票因此我们必须在他/她已经投票的情况下禁用该功能。
我们举一个例子,一个人已经投票了一些产品,并且希望看到完整的清单。
在这种情况下,我们希望看到:
处理此问题的一种方法是将CARS表与LIKES表连接(我将用户的字形留在外面以简化)。
执行此操作的方法是使用 JOIN 连接汽车ID上的两个表。
此SQL命令将返回一组行,这些行是CARS中每行的组合,后跟相对用户名。
这会导致相同CAR的多行,每个upvoting用户一行,需要业务逻辑来处理显示正确页面的问题。
SQL逻辑中的另一个步骤是使用LEFT JOIN。
LEFT JOIN 将包含 ALL 来自第一个表的记录,并将它们与第二个表的匹配行连接起来。
因此,将carS与LIKE加入car-id并询问我们想要的用户名,将返回连接到(并且仅限于)与用户名相关条件的记录的完整汽车列表(左起所有记录)。
示例可以是:
| CARS |
| ID | MODEL |
|------+---------------|
| 1 + FORD |
| 2 + OPEL |
| 3 + FERRARI |
| 4 + GM |
|----------------------|
| LIKES |
| USERNAME | CAR_ID |
|------------+---------|
| KEVIN | 3 |
| PAUL | 3 |
|------------+---------|
如果我使用这样的简单JOIN:
SELECT ID, MODEL, USERNAME
FROM CARS
JOIN LIKES ON CAR_ID = ID
它会返回:
| ID | MODEL | USERNAME |
| 3 | FERRARI | KEVIN |
| 3 | FERRARI | PAUL |
那是不完整的
如果我使用这样的东西:
SELECT ID, MODEL, USERNAME
FROM CARS
LEFT JOIN LIKES ON CAR_ID = ID
我会这样:
| ID | MODEL | USERNAME |
| 1 | FORD | NULL |
| 2 | OPEL | NULL |
| 3 | FERRARI | KEVIN |
| 3 | FERRARI | PAUL |
| 4 | GM | NULL |
即使更好,这仍然是不正确的。
将删除FERRARI的双记录,为联接添加条件:
SELECT ID, MODEL, USERNAME
FROM CARS
LEFT JOIN LIKES ON CAR_ID = ID AND USERNAME = "KEVIN"
这将返回:
| ID | MODEL | USERNAME |
| 1 | FORD | NULL |
| 2 | OPEL | NULL |
| 3 | FERRARI | KEVIN |
| 4 | GM | NULL |
这是正确的清单。
一旦我获得此列表,我需要向用户显示
if USERNAME is not NULL then DISABLE LIKE BUTTON
(伪代码)
我希望这对某人有用