【问题标题】:php mysql order by priority and rankingphp mysql 按优先级和排名排序
【发布时间】:2013-12-22 13:45:36
【问题描述】:

我有下表:

 Properties
 id     agency_id     refno
 1       1            AA101
 2       3            AA201
 3       2            AA501
 4       1            AA762
 5       3            AA555

 agency
 agency_id      agency_name     priority
  1                A              30
  2                B              10
  3                C              20

我已经在代理表中定义了每个代理的优先级:

现在我想根据排名和优先级从属性表中提取行。我想从第一个机构中提取第一行,从第二个机构中提取第一行,从第三个机构中提取第一行,依此类推。

然后是第 1 机构的第 2 行、第 2 机构的第 2 行、第 3 机构的第 2 行,依此类推。

然后我想根据每个机构的优先级对整个结果进行排序。我正在使用以下条款,但它没有给出预期的结果

 select properties.id,
        properties.agency_id,
        IF(@prev <> properties.agency_id, @cnt := 1, @cnt := @cnt + 1) AS rank, @prev := properties.agency_id,
        properties.refno
 where properties.agency_id = agency.agency_id
        order by agency.priority, rank

我已经加入了,它工作正常,没有错误。但我需要如下结果:

我已经在代理表中定义了每个代理的优先级。查询与联接工作正常。我需要的结果如下:

 agency2 row1
 agency3 row1
 agency1 row1

 agency2 row2
 agency3 row2
 agency1 row2

 agency2 row3
 agency3 row3
 agency1 row3

根据代理表中定义的优先级和排名。

【问题讨论】:

  • 如何为每个属性分配优先级?请记住,SQL 表本质上是无序的,因此需要有一个明确包含此信息的列。
  • 您能否提供一张表格,说明您希望理想的结果是什么样的?我不确定我是否理解这个问题......
  • 您缺少FROM 子句,添加它并改用JOINit will run 但不确定这是否是您要查找的内容。
  • 我已经在代理表中定义了每个代理的优先级。查询与联接工作正常。我需要的结果如下:agent2 row1 agent3 row1 agent1 row1 agent2 row1 agent3 row1 agent1 row1

标签: php mysql


【解决方案1】:

请查看JOIN的概念

查询必须join这两个表。

select 
  properties.id,
  properties.agency_id,
  IF(@prev <> properties.agency_id, @cnt := 1, @cnt := @cnt + 1) AS rank, 
  @prev := properties.agency_id,
  properties.refno
FROM properties
INNER JOIN agency  ON properties.agency_id = agency.agency_id
order by agency.priority, rank 

【讨论】:

  • 我已经使用了连接,但它仍然没有显示出想要的结果。顺序应如下 代理2 行1 代理3 行1 代理1 行1 代理2 行2 代理3 行2 代理1 行2 代理2 行3 代理3 行3 代理1 行3 等等代理
  • 试试group by agency id
  • group by 仅显示每个机构的一行。我想显示每个组中的所有行直到结束。
  • 它工作正常。我想根据该机构对最新的房产进行排名。我有一个列名“created”,我正在尝试按 agent.priority、rank、properties.created 排序,但它没有给我想要的结果。我怎样才能实现它????谢谢
  • 我如何对每个代理机构的最新添加属性进行排名????请帮忙。我有一个日期字段,我试图通过创建 desc 来使用它。但它不工作。请帮忙
猜你喜欢
  • 2011-10-09
  • 2012-06-07
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
  • 2020-06-23
相关资源
最近更新 更多