----- Original Message ----- From: "Pakó Géza" <[EMAIL PROTECTED]> To: "Jouni Hartikainen" <[EMAIL PROTECTED]> Sent: Saturday, October 11, 2003 7:03 PM Subject: Re: How to search by groups efficiently with MySql 4.0.15?
> how about: > > select record.* > from link > where group_id='x' > left join record on record.archive_id=link.archive_id > ? > > hope this helps > Geza Pako > > ----- Original Message ----- > From: "Jouni Hartikainen" <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]> > Sent: Saturday, October 11, 2003 9:09 AM > Subject: How to search by groups efficiently with MySql 4.0.15? > > > > > > Hi all. > > > > > > I have this kind of problem setup: > > > > 1. I have a bunch of records and I need to store some record specific data > > about each of them (date, owner etc). > > > > 2. I have a list of categories (=groups) in which a record may belong to > and > > I have to be able to store some group specific data (name, code, is group > > shown etc) for each group. > > > > 3. One record can be in multiple groups and a single group can contain > > multiple records (n..n relation) > > > > > > The question is: > > > > Which is the best database structure for this kind of situation that > enables > > me to _efficiently_ find records by groups using various conditions and > > MySQL 4.0.15? > > > > For example I should be able to find all records that belong to group 1 > and > > 2 and to one of the groups 3,4 and 5. (1 AND 2 AND (3 OR 4 OR 5)). > > > > > > Currently I have this kind of structure: > > > > Table record: > > +------------+---------+---------------------+ > > | archive_id | creator | created_time | > > +------------+---------+---------------------+ > > | 1 | 1 | 2003-10-10 21:47:35 | > > | 2 | 2 | 2003-10-10 21:47:35 | > > | 3 | 2 | 2003-10-10 21:47:35 | > > | 4 | 3 | 2003-10-10 21:47:35 | > > +------------+---------+---------------------+ > > > > Table group: > > +----+----------------------------------+-------+ > > | id | name | shown | > > +----+----------------------------------+-------+ > > | 1 | Group name 1 | 1 | > > | 2 | Group name 2 | 1 | > > | 3 | Group name 3 | 1 | > > | 4 | Group name 4 | 1 | > > | 5 | Group name 5 | 1 | > > +----+----------------------------------+-------+ > > > > Table link: > > +------------+----------+ > > | archive_id | group_id | > > +------------+----------+ > > | 1 | 1 | > > | 1 | 2 | > > | 2 | 1 | > > | 3 | 3 | > > +------------+----------+ > > > > > > This seems logical structure for me. The problem arises when I try to make > > queries to the structure. > > > > The best way I have figured out to find records by groups is to perform a > > query like this: > > SELECT link1.archive_id FROM link AS link1, link AS link2 WHERE > > link1.group_id=1 AND link2.group_id=2 AND > link1.archive_id=link2.archive_id; > > > > The query above gives me the archive_id 1 as it should. (Query means that > I > > want to find all records that belong to groups 1 and 2). > > > > As you can easily imagine, when there is a lot of both records and groups > > and when searching conditions are a bit more complicated than in my > example > > query, the join that is performed is pretty enormous. And the query string > > is huge too (and even worse hard to construct programmatically) > > > > So I'm asking is there any better way to either construct the database > > tables or to perform searching queries? > > > > > > Sincerely, > > > > Jouni Hartikainen > > [EMAIL PROTECTED] > > > > _________________________________________________________________ > > Add photos to your messages with MSN 8. Get 2 months FREE*. > > http://join.msn.com/?page=features/featuredemail > > > > > > -- > > MySQL General Mailing List > > For list archives: http://lists.mysql.com/mysql > > To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED] > > > > > > > -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]