具有多列的mysql顺序

时间:2014-05-06 06:46:59

标签: mysql sql ruby-on-rails

我遇到了这个问题。我正在开发使用带有activerecord的rails。我有2个表Cities(id, title, place_count)Places(id, title, city_id, position)

我正在加入他们:

Place.joins(:city).order("cities.place_count DESC")

在视图中我将这些记录分组,就像在城市中按顺序排列的地方一样,当城市改变时,它会改变城市的标题。像这样的东西。

<% @places.each do | place| %>
<% city_id = place.city.id %>
        <% unless city_title == place.city.title %>
          <% city_title = place.city.title %>
          <tr class="caption all_places city-<%= city_id %>"><td colspan="3"><%= city_title %></td></tr>
        <% end %>
        <tr id="place-<%= place.id %>" class="hoverable all_places city-<%= city_id %>">
          <td><%= place.title %></td>
          <td>
            <p>
              <%= place.address %><br><%= place.phone_number %><br/><%= link_to place.site, "http://#{place.site}", target:"_blank", rel: "nofollow", class: "place-link" if place.site.present? %>
            </p>
          </td>
          <td><%= image_tag place.small_logo, alt: place.title %></td>
        </tr>
        <% end %>

Places表中,还有一个名为position的列位于城市范围内,因此每个城市都有该位置。我想要的是当我选择它时首先选择按计数排序并在该范围内按位置排序,如果位置为null,则为null。所以它看起来像这样:

city with count 10
  place 0
  place 1
  place 2
  place 3
  null
  null
city with count 5
  place 0
  place 1
... so on

修改

我试过这样的事情:

Place.joins(:city).order("cities.places_count DESC").order("-position DESC")

如果城市下的地方数不同,那就可以正常工作,但是当两个或两个以上的城市有相同的地点时,它们会混合在一起!

1 个答案:

答案 0 :(得分:0)

我想我找到了自己的回答。我玩了一下,似乎工作得很好。我所做的是由city_tite订购,然后按位置排序

Place.joins(:city).order("cities.places_count DESC").order(""cities.title ASC).order("-position DESC")