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) { | 	public function onSearchTermParse(SearchTermParseEvent $event) { | ||||||
| 		$matches = array(); | 		$matches = array(); | ||||||
| 
 | 
 | ||||||
| 		if(preg_match("/^(.+)tags([:]?<|[:]?>|[:]?<=|[:]?>=|[:|=])([0-9]+)$/", $event->term, $matches)) { | 		if(preg_match("/^(.+)tags([:]?<|[:]?>|[:]?<=|[:]?>=|[:|=])([0-9]+)$/i", $event->term, $matches)) { | ||||||
| 			global $database; | 			global $database; | ||||||
| 			$type = $matches[1]; | 			$type = $matches[1]; | ||||||
| 			$cmp = ltrim($matches[2], ":") ?: "="; | 			$cmp = ltrim($matches[2], ":") ?: "="; | ||||||
| @ -59,14 +59,14 @@ class TagCategories extends Extension { | |||||||
| 
 | 
 | ||||||
| 			$types = $database->get_col('SELECT category FROM image_tag_categories'); | 			$types = $database->get_col('SELECT category FROM image_tag_categories'); | ||||||
| 			if(in_array($type, $types)) { | 			if(in_array($type, $types)) { | ||||||
| 				$event->add_querylet(new Querylet("images.id IN (
 | 				$event->add_querylet( | ||||||
| 													SELECT * FROM ( | 					new Querylet("EXISTS (
 | ||||||
| 														SELECT it.image_id | 					    SELECT 1 | ||||||
| 					    FROM image_tags it | 					    FROM image_tags it | ||||||
| 					    LEFT JOIN tags t ON it.tag_id = t.id | 					    LEFT JOIN tags t ON it.tag_id = t.id | ||||||
|  | 					    WHERE images.id = it.image_id | ||||||
| 					    GROUP BY image_id | 					    GROUP BY image_id | ||||||
| 					    HAVING SUM(CASE WHEN t.tag LIKE '$type:%' THEN 1 ELSE 0 END) $cmp $count | 					    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