我知道我正在做这个qry错误 - 它取得了10秒的结果回来w /只有3000行数据......
我有3张桌子:
的用户
ID
用户名
DATA:
1|tom
2|dick
3|harry
的帖子
ID
id_users
DATA:
1|1
2|1
3|1
4|2
5|2
6|3
cronjobs
ID
id_post
id_wall
DATA: id|id_post|id_wall
1|1|1
2|1|2
3|1|3
4|1|4
5|1|5
6|2|5
7|4|3
8|6|3
9|4|4
用户将发帖 该帖子将放在一个或多个墙上,并存储在 cronjobs 表中。 cronjobs 上的ID是自动增量。 我需要在每面墙上获取用户名和最后一篇文章。 在上面的例子中
迪克是最后一个以4号位发布在第4号墙上的人 哈利是最后一个用帖子6发布在墙3上的人 汤姆是最后一个在5号墙上张贴帖子2的人 汤姆是最后一个用帖子1发布在2号墙上的人 汤姆是最后一个在帖子1上张贴帖子1的人
这是qry我目前正在使用,我知道使用IN子句并在其中选择,正在杀死这个....
SELECT
c.id,
c.id_post,
c.id_wall AS id_wall,
p.id_users AS user_id,
u.NAME AS username
FROM
cronjobs c,
posts p,
users u
WHERE c.id IN
(SELECT MAX(id)
FROM
cronjobs
GROUP BY id_wall)
AND c.id_post = p.id
AND p.id_users = u.id
ORDER BY c.id
感谢任何帮助!
答案 0 :(得分:1)
试试这个
SELECT
c.id,
c.id_post,
c.id_wall AS id_wall,
p.id_users AS user_id,
u.NAME AS username
FROM
cronjobs c,
posts p,
users u ,
(SELECT MAX(id) as id
FROM
cronjobs
GROUP BY id_wall) table_id
where c.id_post = p.id
AND p.id_users = u.id
and table_id.id =c.id
ORDER BY c.id
答案 1 :(得分:0)
您可以在where
子句中使用join而不是子查询,join
部分中的子查询将执行一次,而where
子句中的子查询将针对此查询的所有结果行执行将比您的表现更好,也可以为on()
部分
SELECT
c.id,
c.id_post,
c.id_wall AS id_wall,
p.id_users AS user_id,
u.username AS username
FROM
cronjobs c
join (SELECT MAX(id) id ,id_wall
FROM cronjobs
GROUP BY id_wall) c1 on c.id = c1.id and c.id_wall = c1.id_wall
join posts p on c.id_post = p.id
join users u on p.id_users = u.id
ORDER BY c.id