Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查询以从SQL中排名前三的城市中选出前三名用户_Mysql_Sql_Join_Sql Order By - Fatal编程技术网

Mysql 查询以从SQL中排名前三的城市中选出前三名用户

Mysql 查询以从SQL中排名前三的城市中选出前三名用户,mysql,sql,join,sql-order-by,Mysql,Sql,Join,Sql Order By,我有一个位置(城市)表和一个用户表。我需要从3个顶级城市中检索3个顶级用户(其中一个城市被视为前3名,具体取决于其中有多少用户),以及城市信息。例如: 迈阿密(q=95000) 安德烈 黛布拉·摩根 加布里埃拉 纽约(q=74000) 桑迪 卡西 梅根 圣地亚哥(q=26500) 乌苏拉 雷蒙娜 罗米娜 这是我当前的查询: SELECT l.city, l.q, u.name FROM location AS l JOIN user AS u ON l.id_location = u.id_

我有一个位置(城市)表和一个用户表。我需要从3个顶级城市中检索3个顶级用户(其中一个城市被视为前3名,具体取决于其中有多少用户),以及城市信息。例如:

迈阿密(q=95000)

  • 安德烈
  • 黛布拉·摩根
  • 加布里埃拉
  • 纽约(q=74000)

  • 桑迪
  • 卡西
  • 梅根
  • 圣地亚哥(q=26500)

  • 乌苏拉
  • 雷蒙娜
  • 罗米娜
  • 这是我当前的查询:

    SELECT l.city, l.q, u.name 
    FROM location AS l JOIN user AS u 
    ON l.id_location = u.id_location 
    ORDER BY q DESC 
    LIMIT 3
    
    明显的问题是,它只给我带来了排名前1的城市中排名前3的用户。有什么想法吗

    以下是表格:

    位置

    • id_位置
    • 名字
    • q(用户数量)
    用户

    • id\u用户
    • 名字
    • 图画

    您可以使用GROUP\u CONCAT函数连接所有用户,并使用SUBSTRING\u INDEX仅返回前三个用户:

    SELECT
      l.city, l.q
      SUBSTRING_INDEX(
        GROUP_CONCAT(u.name ORDER BY field_to_order DESC), ',', 3
      ) AS top_3_users
    FROM
      location AS l JOIN user AS u 
      ON l.id_location = u.id_location
    GROUP BY
      l.city, l.q
    ORDER BY
      l.q DESC
    LIMIT 3
    
    结果将是这样的:

    Miami     95000    Andrea, Debra Morgan, Gabriela
    New York  74000    Sandy, Carsie, Megan
    San Diego 26500    Ursula, Ramona, Romina
    
    编辑如果您还需要用户的图片,并且图片是VARCHAR,那么您也可以在该字段上使用GROUP_CONCAT:

    SELECT
      l.city, l.q
      SUBSTRING_INDEX(
        GROUP_CONCAT(u.name ORDER BY field_to_order DESC), ',', 3
      ) AS top_3_users,
      SUBSTRING_INDEX(
        GROUP_CONCAT(u.picture ORDER BY field_to_order DESC), ',', 3
      ) AS top_3_pictures
    FROM
      location AS l JOIN user AS u 
      ON l.id_location = u.id_location
    GROUP BY
      l.city, l.q
    ORDER BY
      l.q DESC
    LIMIT 3
    

    你如何知道哪一个是城市的前三大用户?是否有可以用于订购用户的字段?忘记告诉您了,我还需要用户的图片字段:s@andufo图片是一个varchar字段吗?或者它是二进制的?它是一个varchar(255)