【问题标题】:query to fetch the mostly winning user查询以获取大多数获胜的用户
【发布时间】:2017-02-04 13:01:04
【问题描述】:

我有两张表 film 和 users ,我正在使用这个查询来获取获胜的用户

$winners_query=("Select * from users where user_id IN (Select user_id from film where iswinningclip=1) order by user_id desc limit 12"); 

我很难编写查询来对数据进行排序,以使获胜次数最多的用户应该排在第一位,依此类推。

这对我不起作用

$winners_query=("Select * from users where user_id IN (Select count(user_id) AS CN from film where iswinningclip=1 oder by CN desc) order by user_id desc limit 12"); 

users表包含user_id等相关字段,film表包含film_id、user_id、iswinningclip 有人可以推荐我吗?

谢谢

【问题讨论】:

  • 你好。你能告诉我们这张表的两个表的结构吗?
  • 编辑您的问题以及谁采样数据和期望的结果。
  • What is Sqlfiddle and why should I care?。加载它。显示预期结果。帮助我们为您提供帮助:p ...如果该链接太混乱,请转到它的第 2 节
  • @Liza Ash 我已经给出了一个例子的答案。检查看看这是否是你想要的

标签: php mysql


【解决方案1】:

试试这个对你有帮助。

SELECT  users.*, count(film.user_id) as no_of_awards
FROM  users join film  
On (users.user_id = film.user_id)
WHERE film.iswinningclip = 1
Group by users.user_id
Order by no_of_awards DESC

【讨论】:

  • 这个工作的人,现在我有问题,当用户滚动记录扩展时,我使用 ajax 进行分页,我一直在 ajax 中传递 user_id,因此当用户滚动时应该执行 '$winners_query =("Select users.*,count(film.user_id) as no_of_awards from users JOIN film On (users.user_id = film.user_id) WHERE film.iswinningclip = 1 and users.user_id
【解决方案2】:

在这种情况下您可以使用连接,否则您使用的查询看起来更复杂

SELECT  users.*, film.*
FROM  users 
inner join
film  
On (users.id = film.user_id)
WHERE film.iswinningclip = 1
Group by users.id
Order by count(users.id) DESC

【讨论】:

  • 条件应该是什么?
  • 你到底想在查询中放入什么条件
  • 我希望用户最先出现其剪辑 iswinningclip=1 的最大次数
  • 它给出了获奖剪辑的总数
【解决方案3】:

在 user_id 上使用两个表的 join,条件为 winsclip=1,按 userid 应用组,最后根据 user_id 的计数降序排列结果

查询应该是这样的

SELECT 
    u.id, u.username, u.gender //select as many columns you want from users
FROM
    users u
        JOIN
    film f ON (u.id = f.user_id)
WHERE
    f.iswinningclip = 1
GROUP BY u.id
ORDER BY COUNT(u.id) DESC

完整示例

CREATE TABLE users (
  id INT NOT NULL AUTO_INCREMENT,
  username VARCHAR(45) NULL,
  gender VARCHAR(45) NULL,
  PRIMARY KEY (id));

CREATE TABLE film (
  id INT NOT NULL AUTO_INCREMENT,
  user_id INT NULL,
  film_id INT NULL,
  iswinningclip INT NULL,
  PRIMARY KEY (id));


INSERT INTO users (username, gender) VALUES ('Kiran', 'M');
INSERT INTO users (username, gender) VALUES ('Liza', 'F');
INSERT INTO users (username, gender) VALUES ('Ajith', 'M');

INSERT INTO  film (film_id, user_id, iswinningclip) VALUES ('1', '1', '1');
INSERT INTO  film (film_id, user_id, iswinningclip) VALUES ('1', '2', '1');
INSERT INTO  film (film_id, user_id, iswinningclip) VALUES ('2', '1', '0');
INSERT INTO  film (film_id, user_id, iswinningclip) VALUES ('2', '2', '1');
INSERT INTO  film (film_id, user_id, iswinningclip) VALUES ('3', '3', '1');

SELECT 
    u.id, u.username, u.gender
FROM
    users u
        JOIN
    film f ON (u.id = f.user_id)
WHERE
    f.iswinningclip = 1
GROUP BY u.id
ORDER BY COUNT(u.id) DESC

结果

【讨论】:

    【解决方案4】:

    首先选择 userid 和 iswinningclip,然后按 userid 应用组,这样您将获得 iswinningclip 的总数,然后在该列上应用 max 函数。那就是获胜的id。

    【讨论】:

    • select userid, count(iswinning) AS x from film group by userid order by x desc : 这里的列是 userid、filmid 和 iswinning(这个列只有 1 和 0)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多