PHP MySQL按优先级和排名排序

3
我有以下表格:

 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

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

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

然后从第一个机构提取第二行,从第二个机构提取第二行,从第三个机构提取第二行,以此类推。

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

 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

我已经添加了JOIN,目前没有出现错误。但是我需要按照以下方式获取结果:

我已经在机构表中定义了每个机构的优先级。JOIN查询已经正常工作,但是我需要按照以下方式获取结果:

 agency2 row1
 agency3 row1
 agency1 row1

 agency2 row2
 agency3 row2
 agency1 row2

 agency2 row3
 agency3 row3
 agency1 row3

根据机构表和等级中定义的优先级。

你如何为每个属性分配优先级?请记住,SQL表本质上是无序的,因此需要一个明确包含此信息的列。 - Gordon Linoff
你能提供一个理想结果的表格吗?我不确定我理解这个问题... - Nathan H
1
你缺少了 FROM 子句,加上它并使用 JOIN 替代,就可以 运行了。但不确定这是否符合你的要求。 - Mahmoud Gamal
我已经在机构表中定义了每个机构的优先级。联接查询正常工作。我需要以下结果: 机构2 第1行 机构3 第1行 机构1 第1行 机构2 第1行 机构3 第1行 机构1 第1行 - Asif Hameed
1个回答

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 

我已经使用了join,但仍然没有显示所需的结果。顺序应该如下: agency2 row1 agency3 row1 agency1 row1 agency2 row2 agency3 row2 agency1 row2 agency2 row3 agency3 row3 agency1 row3以此类推。 - Asif Hameed
尝试按机构ID进行分组。 - rjv
按组分组后每个机构只显示一行数据。我希望能够显示每个组中的所有数据,直到结束。 - Asif Hameed
它正常工作。我想根据经纪公司对最新属性进行排名。我有一个列名为“created”,我正在尝试按照经纪公司.priority,排名,属性.created进行排序,但它没有给我期望的结果。我该如何实现????谢谢 - Asif Hameed
我该如何为每个机构排列最新添加的属性?请帮忙。我有一个日期字段,尝试使用它按创建时间降序排序,但不起作用。请帮忙。 - Asif Hameed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接