sql >> Database teknologi >  >> RDS >> Oracle

Hvordan kan jeg bruge GROUP_CONCAT i Rails?

Så længe jeg ved, er der ingen group_concat tilsvarende i Rails, men du kan bruge includes for at gøre det:

continents = Continents
  .joins(:countries, :event_locations)
  .includes(:countries)
  .group("continents.code")

continents.each do |continent| 
  continent.countries.join(",")
end

Dette vil kun producere 2 forespørgsler - jeg ved, det er ikke så godt som én, men jeg tror, ​​det er det bedste, end Rails kan gøre uden "group_concat". Den anden vej vil være sådan noget:

Country
  .select("countries.id, GROUP_CONCAT(countries.name) as grouped_name")
  .joins(:continents, :event_locations)
  .group("continents.code")

Men hvis du gør det, skal du ændre i henhold til din databaseleverandør.

  • MySQL :group_concat(lande.navn)
  • PostgreSQL :string_agg(lande.navn, ',')
  • Oracle :listagg(lande.navn, ',')


  1. mysql lignende forespørgsel ekskluder tal

  2. oci_bind_by_name virker ikke i PHP

  3. Kan PostGIS bruges til at lave et netkort over et land?

  4. XMLAGG med RTRIM-problem