Improve SQL performance by replacing size(e.tags) with a left join and a
null condition
Move the QueryBuilder logic into getRawBuilderForUntaggedByUser
Signed-off-by: Kevin Decherf <kevin@kdecherf.com>
- * Retrieves untagged entries for a user.
+ * Retrieve a sorted list of untagged entries for a user.
public function getBuilderForUntaggedByUser($userId)
{
return $this
public function getBuilderForUntaggedByUser($userId)
{
return $this
- ->getSortedQueryBuilderByUser($userId)
- ->andWhere('size(e.tags) = 0');
+ ->sortQueryBuilder($this->getRawBuilderForUntaggedByUser($userId));
+ }
+
+ /**
+ * Retrieve untagged entries for a user.
+ *
+ * @param int $userId
+ *
+ * @return QueryBuilder
+ */
+ public function getRawBuilderForUntaggedByUser($userId)
+ {
+ return $this->getQueryBuilderByUser($userId)
+ ->leftJoin('e.tags', 't')
+ ->andWhere('t.id is null');