have query use EXISTS rather than IN
preferably we would have a table with image tag counts, but this works for now
This commit is contained in:
		
							parent
							
								
									790cb0d7a9
								
							
						
					
					
						commit
						320a92289b
					
				| @ -51,7 +51,7 @@ class TagCategories extends Extension { | ||||
| 	public function onSearchTermParse(SearchTermParseEvent $event) { | ||||
| 		$matches = array(); | ||||
| 
 | ||||
| 		if(preg_match("/^(.+)tags([:]?<|[:]?>|[:]?<=|[:]?>=|[:|=])([0-9]+)$/", $event->term, $matches)) { | ||||
| 		if(preg_match("/^(.+)tags([:]?<|[:]?>|[:]?<=|[:]?>=|[:|=])([0-9]+)$/i", $event->term, $matches)) { | ||||
| 			global $database; | ||||
| 			$type = $matches[1]; | ||||
| 			$cmp = ltrim($matches[2], ":") ?: "="; | ||||
| @ -59,14 +59,14 @@ class TagCategories extends Extension { | ||||
| 
 | ||||
| 			$types = $database->get_col('SELECT category FROM image_tag_categories'); | ||||
| 			if(in_array($type, $types)) { | ||||
| 				$event->add_querylet(new Querylet("images.id IN (
 | ||||
| 													SELECT * FROM ( | ||||
| 														SELECT it.image_id | ||||
| 				$event->add_querylet( | ||||
| 					new Querylet("EXISTS (
 | ||||
| 					    SELECT 1 | ||||
| 					    FROM image_tags it | ||||
| 					    LEFT JOIN tags t ON it.tag_id = t.id | ||||
| 					    WHERE images.id = it.image_id | ||||
| 					    GROUP BY image_id | ||||
| 					    HAVING SUM(CASE WHEN t.tag LIKE '$type:%' THEN 1 ELSE 0 END) $cmp $count | ||||
| 													) AS subquery | ||||
| 					)"));
 | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user