Come recuperare argomenti ordinati per valore del campo personalizzato iso8601?

Il limit(10) dovrebbe già farlo :slight_smile:

Una cosa del genere dovrebbe funzionare: (ma non testata)

Topic.where("category_id in (?)", [cat_id])
         .where("closed = ?", false)
         .joins("LEFT JOIN topic_custom_fields import_tcf ON import_tcf.topic_id = topic.id AND topic_custom_fields.name = 'importedSortDate'")
         .order("TIMESTAMP import_tcf.value")
         .order("created_at desc")
         .limit(10)

Il problema è che chiedere a PostgreSQL di convertire la stringa della data in un timestamp sarà molto inefficiente. Dovrà eseguire la conversione per ogni singolo argomento prima di selezionare i primi 10.

Ci sono alcune opzioni a cui posso pensare: potresti memorizzare le date come “secondi dall’epoca” invece che in formato ISO8601. Questo le renderà molto più facili da ordinare per PostgreSQL. Oppure potresti essere in grado di utilizzare una migrazione del database per aggiungere un indice alla tabella topic_custom_fields per TIMESTAMP value.