Hello Surya,

Part of the problem may be that you are so focused on the details that might have lost sight of the purpose.

On 7/12/2014 8:24 AM, Surya Savarika wrote:
Hi,
I have two query series that I wonder whether they can be compacted
into a single query:

FIRST QUERY SERIES

       cursor.execute("""select d.ID, d.Name, b.SupersetID from
books_data as d join books as b on d.ID=b.BooksDataID2
                  where b.BooksDataID!=b.BooksDataID2 and b.ReligionsID=%s""", 
(rel_id,))

Are you trying to find the names of any supersets that contain any book that has a certain ReligionsID value? (list1)

       tmp = cursor.fetchall()
       cursor.execute("""select d.ID from books_data as d join books as
b on d.ID=b.BooksDataID2 join books_compilations as c
                  on d.ID=c.BooksDataID where b.ReligionsID=%s""", (rel_id,))


Are you trying to find a list of compilations that contain any books that has a certain ReligionsID value? (list2)


       junk_ids = [itm[0] for itm in cursor]
       poss_books_data = []
       for id, name, ss_id in tmp:
         if id not in junk_ids:
           poss_books_data.append([id, name, ss_id])


This seems to be a process by which you determine if there are any books in list 1 (the first query) that are not in list 2 (the second query).

Did I understand that correctly?


SECOND QUERY SERIES

       cursor.execute("""select ReligionsID from books where
BooksDataID=%s""", (tmp_ids[0],))
       rel_id = cursor.fetchone()[0] # The first entry will always give
the correct value

Determine the ReligionsID for a particular book.

       cursor.execute("""select d.ID, d.Name, b.SupersetID from
books_data as d join books as b on d.ID=b.BooksDataID2
                  where b.BooksDataID!=b.BooksDataID2 and b.ReligionsID=%s""", 
(rel_id,))

Find all the related books that share the same ReligionsID value.


       tmp = cursor.fetchall()
       cursor.execute("""select d.ID from books_data as d join books as
b on d.ID=b.BooksDataID2 join books_compilations as c
                  on d.ID=c.BooksDataID where b.ReligionsID=%s""", (rel_id,))


Find any compilations that contain the same ReligionsID value.

Did I decode those questions properly?

I don't know that they're necessary, but here are the table definitions:

mysql> describe books;
+-----------------+------------+------+-----+---------+----------------+
| Field           | Type       | Null | Key | Default | Extra          |
+-----------------+------------+------+-----+---------+----------------+
| ID              | int(11)    | NO   | PRI | NULL    | auto_increment |
| ReligionsID     | int(11)    | NO   | MUL | NULL    |                |
| PrimaryReligion | tinyint(1) | YES  |     | 0       |                |
| BooksDataID     | int(11)    | NO   |     | NULL    |                |
| BooksDataID2    | int(11)    | YES  |     | NULL    |                |
| SupersetID      | int(11)    | YES  |     | NULL    |                |
+-----------------+------------+------+-----+---------+----------------+
6 rows in set (0.09 sec)

mysql> describe books_data;
+------------+------------------------------------------------------------------
-------------------------------------------------------+------+-----+---------+-
---------------+
| Field      | Type
                                                        | Null | Key | Default |
Extra          |
+------------+------------------------------------------------------------------
-------------------------------------------------------+------+-----+---------+-
---------------+
| ID         | int(11)
                                                        | NO   | PRI | NULL    |
auto_increment |
| Name       | varchar(30)
                                                        | NO   |     | NULL    |
                |
| Label      | enum('Cannonised','Uncannonised, fully accepted','Uncannonised, \
n         not fully accepted','Uncannonised, controversial') | NO   |     | NULL
     |                |
| PrimaryKey | tinyint(1)
                                                        | YES  |     | 0       |
                |
+------------+------------------------------------------------------------------
-------------------------------------------------------+------+-----+---------+-
---------------+
4 rows in set (0.13 sec)

mysql> describe books_compilations;
+-------------+-------------+------+-----+---------+----------------+
| Field       | Type        | Null | Key | Default | Extra          |
+-------------+-------------+------+-----+---------+----------------+
| ID          | int(11)     | NO   | PRI | NULL    | auto_increment |
| Name        | varchar(30) | NO   |     | NULL    |                |
| SupersetID  | int(11)     | NO   |     | NULL    |                |
| BooksDataID | int(11)     | NO   |     | NULL    |                |
+-------------+-------------+------+-----+---------+----------------+
4 rows in set (0.20 sec)


If you can verify that I have correctly stated what you are trying to do, we (the list) can try to help you do those steps more efficiently.

If I have misinterpreted your intentions, please describe what it is you are looking for and we can work from there.


Yours,
--
Shawn Green
MySQL Senior Principal Technical Support Engineer
Oracle USA, Inc. - Hardware and Software, Engineered to Work Together.
Office: Blountville, TN

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql

Reply via email to