X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2FID3FS%2FDB.pm;h=11429ac10c8a5d018696c1b724528c1d88fcb61c;hb=8722415c0065dad39aba0ea6340f66a35424b388;hp=6424e8c6dc3cab3169b12437e8508fa0ef31db00;hpb=833a8e7fc8037e933dd944a456e817beba1c4522;p=id3fs.git diff --git a/lib/ID3FS/DB.pm b/lib/ID3FS/DB.pm index 6424e8c..11429ac 100644 --- a/lib/ID3FS/DB.pm +++ b/lib/ID3FS/DB.pm @@ -396,6 +396,42 @@ sub tags_subselect return shift->tags_subselect_and(@_); } + +sub tags_subselect_and_not +{ + my($self,@constraints)=@_; + my ($tags, $tags_vals, $parent)=$self->constraints_tag_list(@constraints); + my @tags=@$tags; + my @tags_vals=@$tags_vals;; + my $cnt=1; + my @andclauses=(); + my $sql=''; + for my $tag (@tags) + { + if($cnt == 1) + { + $sql="\tSELECT fxt" . scalar(@tags) . ".files_id FROM files_x_tags fxt1\n"; + push(@andclauses, "\t\tfxt${cnt}.tags_id=$tag"); + } + else + { + $sql .= ("\tLEFT JOIN files_x_tags fxt$cnt ON fxt" . + ($cnt-1) . ".files_id=fxt${cnt}.files_id\n"); + push(@andclauses, "\t\tfxt${cnt}.tags_id IS NULL"); + } + print "AND: @andclauses\n"; + $cnt++; + } + if(@andclauses) + { + $sql .= "\tWHERE\n\t\t"; + $sql .= join(" AND\n\t\t", @andclauses) . "\n"; + } + $sql .= "\tGROUP BY fxt". scalar(@tags).".files_id\n"; + return $sql; +} + + sub tags_subselect_and { my($self,@constraints)=@_;