Take article age into account for related article list
authorTim Düsterhus <duesterhus@woltlab.com>
Wed, 3 Jun 2020 11:04:58 +0000 (13:04 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Wed, 3 Jun 2020 11:17:47 +0000 (13:17 +0200)
commita281b8ff4e28f2815da14e3eeb49eb6b715b6aac
tree736023a5717e31ce305beb1e9aff9c0e5115b494
parent80fcab5dd0971f027e2d5ee119bf2bb69ba2936b
Take article age into account for related article list

Instead of just ordering the related articles by the number of matching
tags the articles are now also ordered by their age as a tie-breaker,
referring more recent articles. Previously the order was undefined,
usually preferring older articles, as their rows appear earlier within
the `tag_to_object` table.

It was verified that the new query does not result in a significantly
worse query plan than the old one. The only difference is the addition
of 2 `eq_ref` joins, which is the best possible join type. However we
could get rid of a separate query to pull the articleIDs, because they
are readily available by the pure virtue of having to join the article
table to get the time.

Another possible solution would be ordering by `ABS(article.time - ?)`
with the currently viewed article's time in place of the question mark.
This would prefer articles written within a similar timeframe, without
resulting in a worse query plan within my tests.

Resolves #3285
wcfsetup/install/files/lib/page/AbstractArticlePage.class.php