Re: Feature freeze imminent

Ted Zlatanov <tzz-mIZUurteI1BWk0Htik3J/[email protected]>
Newsgroups gmane.comp.window-managers.ion.general
Organization Теодор Златанов @ Cienfuegos
Message-ID <[email protected]>
On Tue, 27 Feb 2007 18:53:50 +0000 (UTC) Tuomo Valkonen <[email protected]> wrote: 

TV> On 2007-02-27, Sam Mason <[email protected]> wrote:
>> In more human terms I would have a table of files, the purpose of which
>> is to give you the fileid (sort of like the inode number), a table of
>> tags that define what tags are known, and a table containing the pairs
>> (tag,fileid) that define what files have what tags.

TV> Yeah, that's one quite simple layout, but how would you make the
TV> intersection of the search results for different tags then? A
TV> simple "same row" intersection doesn't work anymore. Does SQL 
TV> have a more complicated intersection operation? And how efficient
TV> would it be? That's the bottleneck, I think. Plus there's no 
TV> structure for quick access to a known file name, which would seem

SQL is pretty good about about searching, especially if you index your
columns well.  Something like this, from the Oracle docs, should be
available in most good databases:

INTERSECT Example

The following statement combines the results with the INTERSECT
operator, which returns only those rows returned by both queries:

SELECT part 
    FROM orders_list1 
INTERSECT 
SELECT part 
    FROM orders_list2;

PART 
---------- 
TAILPIPE 

So for your case, it would be

SELECT fileid FROM tagset WHERE tag = 'A'
INTERSECT
SELECT fileid FROM tagset WHERE tag = 'B'

The known file name is just an extra column in the files table, and
searching for it is fast if the column is indexed.

Ted
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.