summaryrefslogtreecommitdiff
path: root/lib/VNDB/DB/VN.pm
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2009-07-05 11:45:15 +0200
committerYorhel <git@yorhel.nl>2009-07-05 11:45:15 +0200
commita7b5f3d5318c59728dc71be2dd093033fe0d2a79 (patch)
tree657feebf4e743ae059c52ec8759e5c7ad98e7ecb /lib/VNDB/DB/VN.pm
parent4484e5eea0632f4a29f20e997ae7007d7ff2726f (diff)
Made a start on the multiple-tag-VN-search
TODO: - spoiler settings? - auto-complete tag names - exclude filter - Improved UI? current location isn't very intuitive - Improve previous tag browser to make use of the VN search?
Diffstat (limited to 'lib/VNDB/DB/VN.pm')
-rw-r--r--lib/VNDB/DB/VN.pm7
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/VNDB/DB/VN.pm b/lib/VNDB/DB/VN.pm
index d0a38ced..5058c367 100644
--- a/lib/VNDB/DB/VN.pm
+++ b/lib/VNDB/DB/VN.pm
@@ -9,7 +9,7 @@ use VNDB::Func 'gtintype';
our @EXPORT = qw|dbVNGet dbVNAdd dbVNEdit dbVNImageId dbVNCache dbScreenshotAdd dbScreenshotGet dbScreenshotRandom|;
-# Options: id, rev, char, search, lang, platform, results, page, order, what
+# Options: id, rev, char, search, lang, platform, tags_include, results, page, order, what
# What: extended categories anime relations screenshots relgraph ranking changes
sub dbVNGet {
my($self, %o) = @_;
@@ -31,6 +31,8 @@ sub dbVNGet {
'('.join(' OR ', map "v.c_languages ILIKE '%%$_%%'", @{$o{lang}}).')' => 1 ) : (),
$o{platform} && @{$o{platform}} ? (
'('.join(' OR ', map "v.c_platforms ILIKE '%%$_%%'", @{$o{platform}}).')' => 1 ) : (),
+ $o{tags_include} && @{$o{tags_include}} ? (
+ 'v.id IN(SELECT vid FROM tags_vn_bayesian WHERE tag IN(!l) GROUP BY vid HAVING COUNT(tag) = ?)' => [ $o{tags_include}, $#{$o{tags_include}}+1 ]) : (),
# don't fetch hidden items unless we ask for an ID
!$o{id} && !$o{rev} ? (
'v.hidden = FALSE' => 0 ) : (),
@@ -73,6 +75,7 @@ sub dbVNGet {
'JOIN relgraph rg ON rg.id = v.rgraph' : (),
);
+ my $tag_ids = $o{tags_include} && join ',', @{$o{tags_include}};
my @select = (
qw|v.id v.locked v.hidden v.c_released v.c_languages v.c_platforms vr.title vr.original v.rgraph v.c_popularity|, 'vr.id AS cid',
$o{what} =~ /extended/ ? (
@@ -81,6 +84,8 @@ sub dbVNGet {
qw|c.added c.requester c.comments v.latest u.username c.rev c.causedby|) : (),
$o{what} =~ /relgraph/ ? 'rg.cmap' : (),
$o{what} =~ /ranking/ ? '(SELECT COUNT(*)+1 FROM vn iv WHERE iv.hidden = false AND iv.c_popularity > v.c_popularity) AS ranking' : (),
+ $tag_ids ?
+ qq|(SELECT AVG(tvb.rating) FROM tags_vn_bayesian tvb WHERE tvb.tag IN($tag_ids) AND tvb.vid = v.id GROUP BY tvb.vid) AS tagscore| : (),
);
my($r, $np) = $self->dbPage(\%o, q|