从 2 table 中获取数据,其中一个 table 依赖于另一个
Get data from 2 tables where one table is dependent of the other
主要Table:'posts'。
结构:
id || text || time || user_id
中学 table: 'likes'.
结构:
id || post_id || time || user_id
在这里,第二个 table 中的 post_id 可以(并且必须)是第一个 table 中的 ID。我想 运行 一个查询,我将从特定 user_id 的 posts table 中获取所有 ID,并从喜欢的 [=] 中获取所有 POST_IDs 60=] 的特定 user_id.
这是我尝试过的方法,但它只从 post 中获取 ID table,没有从 table 中获取任何 ID:
"SELECT id FROM posts WHERE id IN (SELECT post_id FROM likes WHERE user_id=$userid) OR id IN (SELECT id FROM posts WHERE user_id=$userid)"
但是,当我在最后删除 OR 语句时,从喜欢的 table 中提取了 post_id:
"SELECT id FROM posts WHERE id IN (SELECT post_id FROM likes WHERE user_id=$userid)"
我做错了什么?请帮忙。非常感激。谢谢!
额外:
有什么方法可以按 ID 的降序排列它们吗?
如果我按 "p.id DESC" 订购它们,那么来自喜欢 table 的所有 post_id 都会出现在底部。
例如,
post table (1, 2, 3, 4, 5, 9, 10),
中有7个id
3 个赞 table (6, 7, 8).
目前显示为:10, 9, 5, 4, 3, 2, 1, 6, 7, 8。
如何显示如:10, 9, 8, 7, 6, 5, 4, 3, 2, 1?谢谢!
使用 JOIN
SELECT id FROM posts
LEFT JOIN likes ON posts.id = likes.post_id
WHERE likes.user_id = $userid
如果您想从 post table 获取 ALL
id,您可以在这种情况下尝试 mysql LEFT JOIN
,否则很简单 INNER JOIN
会完成你的任务。
SELECT p.id,l.post_id FROM posts p
LEFT JOIN likes l ON p.id=l.post_id
WHERE p.user_id=$userid OR l.user_id=$userid
编辑:
SELECT p.id FROM posts p
LEFT JOIN likes l ON p.id=l.post_id
WHERE p.user_id=$userid OR
l.user_id=$userid
ORDER BY p.id DESC
主要Table:'posts'。
结构:
id || text || time || user_id
中学 table: 'likes'.
结构:
id || post_id || time || user_id
在这里,第二个 table 中的 post_id 可以(并且必须)是第一个 table 中的 ID。我想 运行 一个查询,我将从特定 user_id 的 posts table 中获取所有 ID,并从喜欢的 [=] 中获取所有 POST_IDs 60=] 的特定 user_id.
这是我尝试过的方法,但它只从 post 中获取 ID table,没有从 table 中获取任何 ID:
"SELECT id FROM posts WHERE id IN (SELECT post_id FROM likes WHERE user_id=$userid) OR id IN (SELECT id FROM posts WHERE user_id=$userid)"
但是,当我在最后删除 OR 语句时,从喜欢的 table 中提取了 post_id:
"SELECT id FROM posts WHERE id IN (SELECT post_id FROM likes WHERE user_id=$userid)"
我做错了什么?请帮忙。非常感激。谢谢!
额外:
有什么方法可以按 ID 的降序排列它们吗?
如果我按 "p.id DESC" 订购它们,那么来自喜欢 table 的所有 post_id 都会出现在底部。
例如,
post table (1, 2, 3, 4, 5, 9, 10),
中有7个id
3 个赞 table (6, 7, 8).
目前显示为:10, 9, 5, 4, 3, 2, 1, 6, 7, 8。
如何显示如:10, 9, 8, 7, 6, 5, 4, 3, 2, 1?谢谢!
使用 JOIN
SELECT id FROM posts
LEFT JOIN likes ON posts.id = likes.post_id
WHERE likes.user_id = $userid
如果您想从 post table 获取 ALL
id,您可以在这种情况下尝试 mysql LEFT JOIN
,否则很简单 INNER JOIN
会完成你的任务。
SELECT p.id,l.post_id FROM posts p
LEFT JOIN likes l ON p.id=l.post_id
WHERE p.user_id=$userid OR l.user_id=$userid
编辑:
SELECT p.id FROM posts p
LEFT JOIN likes l ON p.id=l.post_id
WHERE p.user_id=$userid OR
l.user_id=$userid
ORDER BY p.id DESC