MySQL查询内部查询

时间:2013-08-29 08:29:07

标签: mysql sql

我对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的新帖子。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,那么app_id是指向另一个表的链接,而不是appaction的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 <> ''

答案 1 :(得分: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'