2013-12-22 51 views
3

我有以下表格:PHP MySQL的順序和排名

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個機構,從3機構第二行等第二排。

然後,我想根據各機構的優先整個結果進行排序。我正在使用以下條款,但它沒有給出所需的結果

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 

根據代理表中定義的優先級和等級。

+0

如何爲每個屬性分配優先級?請記住,SQL表本質上是無序的,所以需要一個明確包含這些信息的列。 –

+0

你能提供一個你希望結果看起來像理想的表格嗎?我不確定我是否理解這個問題... –

+1

您錯過了'FROM'子句,添加它並使用'JOIN'代替[它將運行](http://www.sqlfiddle.com/#!2/4ea24e/8)但不知道這是你正在尋找或沒有。 –

回答

1

請通過的JOIN

的concpet查詢必須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 
+0

我已經使用了加入,但它仍然沒有表現出慾望的結果。順序應該是如下 agency2 ROW1 agency3 ROW1 agency1 ROW1 agency2 2行 agency3 2行 agency1 2行 agency2 ROW3 agency3 ROW3 agency1 ROW3 等 機構 –

+0

嘗試「按代理機構編號」組 – rjv

+0

組顯示每個代理機構只顯示一行。我想顯示每個組的所有行直到結束。 –