2

我对 MySQL 很陌生,所以对于有经验的人来说,这可能是一个简单的问题,但我就是想不通。我需要从用户发表评论的数据库中获取项目,并且其他人有更新的评论。

我的桌子有这些列

app_id - id of the item

app_comment - comment blank if rate is present

app_rate - rating blank if comment is present

date - date of posting

device_id - unique id to identify each user.

我编写了简单的查询来获取用户(device_id)发布的每条评论。

temp table:
SELECT `app_id` FROM `appaction` WHERE `device_id` = '00000000-5a24-5a06-0000-00005c907706' AND `app_comment` <> ''

但不知道下一步该做什么。现在我不知何故只需要从主表中获取那些 app_id 其他人(不同的 device_id)在这些项目中的每一个都有更新的帖子

更新: 数据示例: http ://www.sqlfiddle.com/#!2/8d986/1

注意:这只是了解表格外观的示例。实际上,它内部有大约 10 000 个值。

例如:我将 device_id 分配给 php 脚本,并且在输出中我想要用户发布自己的所有 app_id 并且在他之后有更新的评论。

输入样本: http ://www.sqlfiddle.com/#!2/66258/1

所需的输出用于输入 ffffffff-c565-9b4a-ffff-ffffc9d821fd

img/本田/AccordPICS/4167946157_a5b77093bc_b.jpg

因为其他人对此 app_id 有更新的帖子。

4

2 回答 2

1

如果我理解正确,那么 app_id 是指向另一个表的链接,而不是应用程序的 id。在这种情况下,您可以执行以下操作:

SELECT ua.id AS user_item_id, oa.id AS other_item_id FROM appaction ua
INNER JOIN appaction oa ON (ua.app_id = oa.app_id AND oa.app_comment <> '' AND oa.date > ua.date)
WHERE 
    ua.device_id = '00000000-5a24-5a06-0000-00005c907706' 
    AND oa.device_id != '00000000-5a24-5a06-0000-00005c907706' 
    AND ua.app_comment <> ''

这将获取具有在项目之后发布的相同 app_id 项目的设备的项目。other_item_id是后面动作的id。

编辑:要获得输出,您只需将上述查询更改为:

SELECT DISTINCT(ua.app_id) FROM appaction ua
INNER JOIN appaction oa ON (ua.app_id = oa.app_id AND oa.app_comment <> '' AND oa.date > ua.date)
WHERE 
    ua.device_id = 'ffffffff-c565-9b4a-ffff-ffffc9d821fd' 
    AND ua.app_comment <> ''
于 2013-08-29T08:39:18.097 回答
0

我猜您正在寻找所有那些最新帖子来自设备 ID 00000000-5a24-5a06-0000-00005c907706 以外的应用程序。如果是这样,请尝试以下查询

SELECT `app_id`, group_concat(device_id) as device_ids FROM `appaction` 
GROUP BY app_id ORDER BY date DESC 
HAVING SUBSTRING_INDEX(device_ids,",",1)!= '00000000-5a24-5a06-0000-00005c907706'
于 2013-08-29T08:44:58.940 回答