2.2 KiB
2.2 KiB
Sites Subscriber Search
Sorting
Added: [2020-04-14 Tue 13:34]
The current sites search code includes the following functioning code for setting a sort order on a search based on form input:
52d1d94485/aweber_app/controllers/queries_controller.php (L386-402)
// Look up the column for the order by clause. There are no SQL column name values passed publicly.
if (!empty($this->data['SearchOrder']['SearchInput'])){
$this->SearchInput->recursive = -1;
if ($time = $this->SearchMutex->lock($aId, '6')) {
$orderCol = $this->SearchInput->find(array('SearchInput.id' => $this->data['SearchOrder']['SearchInput']));
$this->SearchMutex->unlock($aId, '6', $time);
}
if (!empty($orderCol['SearchInput']['column'])){
//Case-insensitive text sorting.
// Lower text fields so that ordering is case insensitive. SearchInputs 5, 23, and 24 are actually integers, despite
// having a text search input. refs #3275
if($orderCol['SearchInput']['input_type'] == 'text' && !in_array($orderCol['SearchInput']['id'], array(5,23,24))) {
$orderCol['SearchInput']['column'] = 'lower('.$orderCol['SearchInput']['column'].')';
}
$this->data['SearchOrder']['column'] = $orderCol['SearchInput']['column'];
}
}
- It is saved with the segment
- It is passed back to the front-end when loading a saved segment
- The
SearchCriteria
class incorporates the selected ordering and column when building its query for a targeted search database. - The broadcast segment service ignores the selected ordering, opting for its own for deliverability reasons.
- All search inputs NOT in the analytics database are available for sorting (https://gitlab.aweber.io/CP/applications/sites/blob/f7ea2e9431e3ed2e694730f6446b4b3828d7c8fe/aweber_app/views/helpers/search_form.php#L54-62).
- Performance degrades with list size, likely due to memory constraints and unindexed sort fields (https://www.cybertec-postgresql.com/en/postgresql-improving-sort-performance/).