id-based refine search

git-svn-id: file:///home/shish/svn/shimmie2/trunk@370 7f39781d-f577-437e-ae19-be835c7a54ca
This commit is contained in:
shish 2007-07-26 12:15:53 +00:00
parent 5feb68f23a
commit 7fbacc7ffd

View File

@ -218,31 +218,41 @@ class TagList extends Extension {
global $config; global $config;
$tags = tag_explode($search); $tags = tag_explode($search);
$s_tags = array_map("sql_escape", $tags);
$s_tag_list = join(',', $s_tags); $tag_id_array = array();
$tags_ok = true;
foreach($tags as $tag) {
$tag_ids = $database->db->GetCol("SELECT id FROM tags WHERE tag LIKE ?", array($tag));
$tag_id_array = array_merge($tag_id_array, $tag_ids);
$tags_ok = count($tag_ids) > 0;
if(!$tags_ok) break;
}
$tag_id_list = join(', ', $tag_id_array);
$query = " if($tags_ok) {
SELECT t2.tag, COUNT(it2.image_id) AS count $query = "
FROM SELECT t2.tag, COUNT(it2.image_id) AS count
image_tags AS it1, FROM
image_tags AS it2, image_tags AS it1,
tags AS t1, image_tags AS it2,
tags AS t2 tags AS t1,
WHERE tags AS t2
t1.tag IN($s_tag_list) WHERE
AND it1.image_id=it2.image_id t1.id IN($tag_id_list)
AND it1.tag_id = t1.id AND it1.image_id=it2.image_id
AND it2.tag_id = t2.id AND it1.tag_id = t1.id
GROUP BY t2.tag AND it2.tag_id = t2.id
ORDER BY count GROUP BY t2.tag
DESC LIMIT ? ORDER BY count
"; DESC LIMIT ?
$args = array($config->get_int('tag_list_length')); ";
$args = array($config->get_int('tag_list_length'));
$tags = $database->db->GetAll($query, $args); $tags = $database->db->GetAll($query, $args);
print $database->db->ErrorMsg(); print $database->db->ErrorMsg();
if(count($tags) > 0) { if(count($tags) > 0) {
$this->theme->display_refine_block($page, $tags, $search); $this->theme->display_refine_block($page, $tags, $search);
}
} }
} }
// }}} // }}}