MySQL Join Question

Posted by rbaker86 on Stack Overflow See other posts from Stack Overflow or by rbaker86
Published on 2010-04-26T21:18:19Z Indexed on 2010/04/26 21:23 UTC
Read the original article Hit count: 151

Filed under:
|
|

Hi i'm struggling to write a particular MySQL Join Query.

I have a table containing product data, each product can belong to multiple categories. This m:m relationship is satisfied using a link table.

For this particular query I wish to retrieve all products belonging to a given category, but with each product record, I also want to return the other categories that product belongs to.

Ideally I would like to achieve this using an Inner Join on the categories table, rather than performing an additional query for each product record, which would be quite inefficient.

My simplifed schema is designed roughly as follows:

products table:

product_id, name, title, description, is_active, date_added, publish_date, etc....

categories table:

category_id, name, title, description, etc...

product_category table:

product_id, category_id

I have written the following query, which allows me to retrieve all the products belonging to the specified category_id. However, i'm really struggling to work out how to retrieve the other categories a product belongs to.

SELECT p.product_id, p.name, p.title, p.description
FROM prod_products AS p
LEFT JOIN prod_product_category AS pc
ON pc.product_id =  p.product_id
WHERE pc.category_id = $category_id
AND UNIX_TIMESTAMP(p.publish_date) < UNIX_TIMESTAMP()
AND p.is_active = 1
ORDER BY p.name ASC

I'd be happy just retrieving the category id's releated to each returned product row, as I will have all category data stored in an object, and my application code can take care of the rest.

Many thanks,

Richard

© Stack Overflow or respective owner

Related posts about mysql

Related posts about left-join