我正在尝试使用下面的两个嵌套查询在我的网站上创建成员排行榜。
第一个查询获取成员列表:
SELECT member_id, username, screen_name FROM exp_members WHERE group_id IN (1,5) LIMIT 100
第二个查询嵌套在第一个查询中,并获取成员条目被收藏次数的计数:
SELECT COUNT(*) AS favorite_count
FROM qb_channel_titles, qb_channel_data, qb_matrix_data
WHERE qb_channel_titles.channel_id = '1'
AND qb_channel_titles.entry_id = qb_channel_data.entry_id
AND qb_channel_titles.entry_id = qb_matrix_data.entry_id
AND field_id = '13'
AND author_id = 'MEMBER_ID_FROM_FIRST_QUERY'
ORDER BY favorite_count DESC"
}
所以我的代码就像:
[first query]
[second query]
..output one row of the leaderboard..
[/second query]
[/first query]
将第二个查询嵌套在第一个查询中,可以得到正确的成员列表和每个收到的投票数,但列表是在第一个(外部)查询而不是第二个(内部)查询中排序的。 / p>
两个问题:
favorite_count
降序排列成员列表?答案 0 :(得分:1)
你想做这样的事吗?
SELECT
member_id,
username,
screen_name,
(SELECT COUNT(*) AS favorite_count
FROM qb_channel_titles, qb_channel_data, qb_matrix_data
WHERE qb_channel_titles.channel_id = '1'
AND qb_channel_titles.entry_id = qb_channel_data.entry_id
AND qb_channel_titles.entry_id = qb_matrix_data.entry_id
AND field_id = '13'
AND author_id = member_id
ORDER BY favorite_count DESC") as "Votes"
FROM
exp_members
WHERE
group_id IN (1,5)
ORDER BY
(SELECT COUNT(*) AS favorite_count
FROM qb_channel_titles, qb_channel_data, qb_matrix_data
WHERE qb_channel_titles.channel_id = '1'
AND qb_channel_titles.entry_id = qb_channel_data.entry_id
AND qb_channel_titles.entry_id = qb_matrix_data.entry_id
AND field_id = '13'
AND author_id = member_id
ORDER BY favorite_count DESC")
LIMIT 100
您还可以将此查询放在视图中并查询视图(按行为方式嵌套另一个查询)。我不是性能方面的专家,但我会说你可以使用触发器并将favorite_count保存在另一个表中,每次用户收藏某些内容时触发器都会更新。另一个表可能只有ID|COUNT
。这会增加时间,但会减少检查排行榜的时间,因此效率将取决于您的用户个人资料,以便收藏或查看排行榜......