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