Merge pull request #6598 from marc1706/ticket/17305

[ticket/17305] Improve queries for unanswered posts/topics
This commit is contained in:
Marc Alexander 2024-04-19 08:51:17 +02:00
commit 25bd56c254
No known key found for this signature in database
GPG key ID: 50E0D2423696F995

View file

@ -337,7 +337,13 @@ if ($keywords || $author || $author_id || $search_id || $submit)
} }
// define some variables needed for retrieving post_id/topic_id information // define some variables needed for retrieving post_id/topic_id information
$sort_by_sql = array('a' => 'u.username_clean', 't' => (($show_results == 'posts') ? 'p.post_time' : 't.topic_last_post_time'), 'f' => 'f.forum_id', 'i' => 't.topic_title', 's' => (($show_results == 'posts') ? 'p.post_subject' : 't.topic_title')); $sort_by_sql = [
'a' => 'u.username_clean',
't' => (($show_results == 'posts') ? 'p.post_time' : 't.topic_last_post_time'),
'f' => 'f.forum_id',
'i' => 't.topic_title',
's' => (($show_results == 'posts') ? 'p.post_subject' : 't.topic_title')
];
/** /**
* Event to modify the SQL parameters before pre-made searches * Event to modify the SQL parameters before pre-made searches
@ -403,11 +409,11 @@ if ($keywords || $author || $author_id || $search_id || $submit)
$sql_sort = 'ORDER BY ' . $sort_by_sql[$sort_key] . (($sort_dir == 'a') ? ' ASC' : ' DESC'); $sql_sort = 'ORDER BY ' . $sort_by_sql[$sort_key] . (($sort_dir == 'a') ? ' ASC' : ' DESC');
$sort_join = ($sort_key == 'f') ? FORUMS_TABLE . ' f, ' : ''; $sort_join = ($sort_key == 'f') ? FORUMS_TABLE . ' f, ' : '';
$sql_sort = ($sort_key == 'f') ? ' AND f.forum_id = p.forum_id ' . $sql_sort : $sql_sort; $sql_sort = ($sort_key == 'f') ? ' AND f.forum_id = t.forum_id ' . $sql_sort : $sql_sort;
if ($sort_days) if ($sort_days)
{ {
$last_post_time = 'AND p.post_time > ' . (time() - ($sort_days * 24 * 3600)); $last_post_time = 'AND ' . ($show_results == 'posts' ? 'p.post_time' : 't.topic_last_post_time') . ' > ' . (time() - ($sort_days * 24 * 3600));
} }
else else
{ {
@ -417,7 +423,7 @@ if ($keywords || $author || $author_id || $search_id || $submit)
if ($sort_key == 'a') if ($sort_key == 'a')
{ {
$sort_join = USERS_TABLE . ' u, '; $sort_join = USERS_TABLE . ' u, ';
$sql_sort = ' AND u.user_id = p.poster_id ' . $sql_sort; $sql_sort = ' AND u.user_id = t.topic_last_poster_id ' . $sql_sort;
} }
if ($show_results == 'posts') if ($show_results == 'posts')
{ {
@ -433,14 +439,13 @@ if ($keywords || $author || $author_id || $search_id || $submit)
} }
else else
{ {
$sql = 'SELECT DISTINCT ' . $sort_by_sql[$sort_key] . ", p.topic_id $sql = 'SELECT DISTINCT ' . $sort_by_sql[$sort_key] . ", t.topic_id
FROM $sort_join" . POSTS_TABLE . ' p, ' . TOPICS_TABLE . " t FROM $sort_join" . TOPICS_TABLE . " t
WHERE t.topic_posts_approved = 1 WHERE t.topic_posts_approved = 1
AND t.topic_moved_id = 0 AND t.topic_moved_id = 0
AND p.topic_id = t.topic_id
$last_post_time $last_post_time
AND $m_approve_topics_fid_sql AND $m_approve_topics_fid_sql
" . ((count($ex_fid_ary)) ? ' AND ' . $db->sql_in_set('p.forum_id', $ex_fid_ary, true) : '') . " " . ((count($ex_fid_ary)) ? ' AND ' . $db->sql_in_set('t.forum_id', $ex_fid_ary, true) : '') . "
$sql_sort"; $sql_sort";
$field = 'topic_id'; $field = 'topic_id';
} }