fix(search): 🐛 fix lack of order_by selectability
This commit is contained in:
parent
77b3f858d1
commit
91500ccfe5
1 changed files with 20 additions and 7 deletions
|
@ -13,6 +13,14 @@ class MySQLHandler
|
||||||
'title', 'view_count', 'brief', 'search_score'];
|
'title', 'view_count', 'brief', 'search_score'];
|
||||||
|
|
||||||
CONST SQL_WRITE_COLUMNS = ['path', 'title', 'brief'];
|
CONST SQL_WRITE_COLUMNS = ['path', 'title', 'brief'];
|
||||||
|
CONST SQL_ORDER_BY_OPTIONS = [
|
||||||
|
'search_score' => 'post_search_score',
|
||||||
|
'search_score_desc' => 'post_search_score DESC',
|
||||||
|
'path' => 'post_path',
|
||||||
|
'path_desc' => 'post_path DESC',
|
||||||
|
'created_at' => 'post_created_at',
|
||||||
|
'created_at_desc' => 'post_created_at DESC'
|
||||||
|
];
|
||||||
|
|
||||||
private $sql_connection;
|
private $sql_connection;
|
||||||
private $db_prefix;
|
private $db_prefix;
|
||||||
|
@ -398,8 +406,6 @@ class MySQLHandler
|
||||||
$options['tags'] ??= [];
|
$options['tags'] ??= [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$options['limit'] = min($options['limit'] ?? 100, 100);
|
|
||||||
|
|
||||||
// This code will take a generic user-input string, and will process it
|
// This code will take a generic user-input string, and will process it
|
||||||
// to see if there are any special options to consider.
|
// to see if there are any special options to consider.
|
||||||
//
|
//
|
||||||
|
@ -467,6 +473,14 @@ class MySQLHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
$options['offset'] ??= 0;
|
$options['offset'] ??= 0;
|
||||||
|
$options['limit'] = min($options['limit'] ?? 100, 100);
|
||||||
|
|
||||||
|
$options['order_by'] ??= 'search_score_desc';
|
||||||
|
|
||||||
|
if(!isset($this::SQL_ORDER_BY_OPTIONS[$options['order_by']])) {
|
||||||
|
throw new Exception("Incorrect order_by option chosen!");
|
||||||
|
}
|
||||||
|
$qry_order_by = $this::SQL_ORDER_BY_OPTIONS[$options['order_by']];
|
||||||
|
|
||||||
$qry =
|
$qry =
|
||||||
"SELECT " . implode(', ', $qry_selects) . "
|
"SELECT " . implode(', ', $qry_selects) . "
|
||||||
|
@ -474,12 +488,11 @@ class MySQLHandler
|
||||||
LEFT JOIN {$this->db_prefix}_post_markdown AS post_markdown
|
LEFT JOIN {$this->db_prefix}_post_markdown AS post_markdown
|
||||||
ON posts.post_id = post_markdown.post_id
|
ON posts.post_id = post_markdown.post_id
|
||||||
WHERE " . implode(' and ', $qry_wheres) . "
|
WHERE " . implode(' and ', $qry_wheres) . "
|
||||||
ORDER BY post_search_score DESC
|
ORDER BY " . $qry_order_by . "
|
||||||
LIMIT " . $options['limit'] . "
|
LIMIT ? OFFSET ?";
|
||||||
OFFSET " . $options['offset'];
|
|
||||||
|
|
||||||
$search_results = $this->_exec($qry, $qry_select_types . $qry_where_types,
|
$search_results = $this->_exec($qry, $qry_select_types . $qry_where_types . "ii",
|
||||||
...array_merge($qry_select_data, $qry_where_data))->fetch_all(MYSQLI_ASSOC);
|
...array_merge($qry_select_data, $qry_where_data, [$options['limit'], $options['offset']]))->fetch_all(MYSQLI_ASSOC);
|
||||||
|
|
||||||
$outdata = [];
|
$outdata = [];
|
||||||
foreach($search_results AS $post_element) {
|
foreach($search_results AS $post_element) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue