All pastes #738528 Raw Edit

Mine

public text v1 · immutable
·published 2007-10-16 12:58 UTC
rendered paste body
DECLARE 
	tag_row RECORD;
	one_tag RECORD;
	blog_row RECORD;
BEGIN

	CREATE TEMPORARY TABLE tags AS
		SELECT 	
			DISTINCT (LOWER (_freetag_blog.tag)) AS tag,
			COUNT (tag)
		FROM	_freetag_blog
		JOIN   _freetagged_object_blog
			ON (_freetag_blog.id = _freetagged_object_blog.tag_id)
		WHERE  	_freetagged_object_blog.object_tree <@ site_path
		AND  	(_freetag_blog.rating & (1 << (1 - 1))) = 0 
		AND  	(_freetagged_object_blog.rating & (1 << (1 - 1))) = 0 
		GROUP BY tag
		ORDER BY 2 DESC
		OFFSET 0
		LIMIT  nb_tags_max;

	-- requete de selection des tags
	
	FOR tag_row IN 
		SELECT 	tag
		FROM	tags
		ORDER BY RANDOM ()
		OFFSET 0
		LIMIT 10 LOOP
		
			SELECT id, raw_tag INTO one_tag
			FROM	_freetag_blog			
			JOIN 	_freetagged_object_blog
				ON (_freetag_blog.id = _freetagged_object_blog.tag_id)
			WHERE  _freetag_blog.tag = tag_row.tag
			GROUP BY 
				_freetag_blog.id,
				_freetag_blog.raw_tag
			ORDER BY COUNT (_freetagged_object_blog.tag_id) DESC
			LIMIT 1;
			
			FOR blog_row IN
				SELECT 
					_blog.id,
					_blog.parent_id,
					_blog.path, 	
					_blog.data, 	
					_blog.date_creation,	
					_blog.date_publishing, 	
					_blog.date_modification, 	
					_blog.reference, 	
					_blog.name,	
					_blog.main_host,	
					_blog.base_host,
					_blog.description,	
					_blog.rating, 
					tag_row.tag::varchar, 
					one_tag.raw_tag,
					(COALESCE (rank, 0))::smallint
				FROM   _blog
				JOIN   _freetagged_object_blog
					ON (_blog.path = _freetagged_object_blog.object_tree)	
				LEFT JOIN _top_blog
					ON (_blog.id = _top_blog.id )
				WHERE _blog.path <@ site_path
				AND   _freetagged_object_blog.tag_id = one_tag.id
				AND (_blog.rating & (1 << (1 - 1))) = 0
				AND COALESCE (rank, 0) > min_blog_rank
				GROUP BY 
						_blog.id,
						_blog.parent_id,
						_blog.path, 	
						_blog.data, 	
						_blog.date_creation,	
						_blog.date_publishing, 	
						_blog.date_modification, 	
						_blog.reference, 	
						_blog.name,	
						_blog.main_host,	
						_blog.base_host,
						_blog.description,	
						_blog.rating, 
						rank  
				ORDER BY RANDOM () * COALESCE (rank, 0) DESC
				OFFSET 0
				LIMIT blogs_per_tag LOOP
				
				RETURN NEXT blog_row;	
				
			END LOOP;
	END LOOP;
	
END;