dbTalk Databases Forums  

Complex Query

comp.databases.mysql comp.databases.mysql


Discuss Complex Query in the comp.databases.mysql forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
cmgmyr
 
Posts: n/a

Default Complex Query - 05-08-2008 , 01:40 PM






Hey All,
I have a little delema that I can't figure out. I have this query
currently:

SELECT p.id, p.styleno, t1.name AS category1, t2.name as category2,
t3.name as category3, p.description, p.price, p.sort
FROM
categories AS t1
LEFT JOIN
categories AS t2 ON t2.parentid = t1.id
LEFT JOIN
categories AS t3 ON t3.parentid = t2.id
INNER JOIN
products AS p ON t3.id = p.category

Now, this works great if there are 3 levels of categories, but I need
this to be altered to show all of the items if there are 1, 2, or 3
levels of categories...and not just 3. Any ideas?

This is kinda what i'm looking for (even though it doesn't work)

SELECT p.id, p.styleno, t1.name AS category1, t2.name as category2,
t3.name as category3, p.description, p.price, p.sort
FROM
categories AS t1
LEFT JOIN
categories AS t2 ON t2.parentid = t1.id
LEFT JOIN
categories AS t3 ON t3.parentid = t2.id
IF t3.id <> NULL INNER JOIN products AS p ON t3.id = p.category
ELSE IF t2.id <> NULL INNER JOIN products AS p ON t2.id = p.category
ELSE INNER JOIN products AS p ON t1.id = p.category

Thanks in advance,
-Chris

Reply With Quote
  #2  
Old   
Rik Wasmus
 
Posts: n/a

Default Re: Complex Query - 05-08-2008 , 03:39 PM






On Thu, 08 May 2008 20:40:04 +0200, cmgmyr <cmgmyr (AT) gmail (DOT) com> wrote:

Quote:
Hey All,
I have a little delema that I can't figure out. I have this query
currently:

SELECT p.id, p.styleno, t1.name AS category1, t2.name as category2,
t3.name as category3, p.description, p.price, p.sort
FROM
categories AS t1
LEFT JOIN
categories AS t2 ON t2.parentid = t1.id
LEFT JOIN
categories AS t3 ON t3.parentid = t2.id
INNER JOIN
products AS p ON t3.id = p.category

Now, this works great if there are 3 levels of categories, but I need
this to be altered to show all of the items if there are 1, 2, or 3
levels of categories...and not just 3. Any ideas?

This is kinda what i'm looking for (even though it doesn't work)

SELECT p.id, p.styleno, t1.name AS category1, t2.name as category2,
t3.name as category3, p.description, p.price, p.sort
FROM
categories AS t1
LEFT JOIN
categories AS t2 ON t2.parentid = t1.id
LEFT JOIN
categories AS t3 ON t3.parentid = t2.id
IF t3.id <> NULL INNER JOIN products AS p ON t3.id = p.category
ELSE IF t2.id <> NULL INNER JOIN products AS p ON t2.id = p.category
ELSE INNER JOIN products AS p ON t1.id = p.category
With minor changes:

SELECT p.id, p.styleno, t1.name AS category1, t2.name as category2,
t3.name as category3, p.description, p.price, p.sort
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parentid = t1.id
LEFT JOIN categories AS t3 ON t3.parentid = t2.id
INNER JOIN products AS p ON p.category = COALESCE(t3.id,t2.id,t1.id);
--
Rik Wasmus


Reply With Quote
  #3  
Old   
cmgmyr
 
Posts: n/a

Default Re: Complex Query - 05-08-2008 , 05:08 PM



On May 8, 4:39*pm, "Rik Wasmus" <luiheidsgoe... (AT) hotmail (DOT) com> wrote:
Quote:
On Thu, 08 May 2008 20:40:04 +0200, cmgmyr <cmg... (AT) gmail (DOT) com> wrote:
Hey All,
I have a little delema that I can't figure out. I have this query
currently:

SELECT p.id, p.styleno, t1.name AS category1, t2.name as category2,
t3.name as category3, p.description, p.price, p.sort
FROM
categories AS t1
LEFT JOIN
categories AS t2 ON t2.parentid = t1.id
LEFT JOIN
categories AS t3 ON t3.parentid = t2.id
INNER JOIN
products AS p ON t3.id = p.category

Now, this works great if there are 3 levels of categories, but I need
this to be altered to show all of the items if there are 1, 2, or 3
levels of categories...and not just 3. Any ideas?

This is kinda what i'm looking for (even though it doesn't work)

SELECT p.id, p.styleno, t1.name AS category1, t2.name as category2,
t3.name as category3, p.description, p.price, p.sort
FROM
categories AS t1
LEFT JOIN
categories AS t2 ON t2.parentid = t1.id
LEFT JOIN
categories AS t3 ON t3.parentid = t2.id
IF t3.id <> NULL INNER JOIN products AS p ON t3.id = p.category
ELSE IF t2.id <> NULL INNER JOIN products AS p ON t2.id = p.category
ELSE INNER JOIN products AS p ON t1.id = p.category

With minor changes:

SELECT p.id, p.styleno, t1.name AS category1, t2.name as category2,
t3.name as category3, p.description, p.price, p.sort
*FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parentid = t1.id
LEFT JOIN categories AS t3 ON t3.parentid = t2.id
INNER JOIN products AS p ON p.category = COALESCE(t3.id,t2.id,t1.id);
--
Rik Wasmus- Hide quoted text -

- Show quoted text -
Thank you very much for that. It's very close. The only problem is, is
that if an item has 2 categories it shows as 2 rows, if it has 3
categories, it shows 3 times. Any ideas?


Reply With Quote
  #4  
Old   
PleegWat
 
Posts: n/a

Default Re: Complex Query - 05-09-2008 , 12:45 PM



On Thu, 08 May 2008 15:08:31 -0700, cmgmyr wrote:

Quote:
On May 8, 4:39Â*pm, "Rik Wasmus" <luiheidsgoe... (AT) hotmail (DOT) com> wrote:
SELECT p.id, p.styleno, t1.name AS category1, t2.name as category2,
t3.name as category3, p.description, p.price, p.sort
Â*FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parentid = t1.id LEFT JOIN categories
AS t3 ON t3.parentid = t2.id INNER JOIN products AS p ON p.category =
COALESCE(t3.id,t2.id,t1.id);

Thank you very much for that. It's very close. The only problem is, is
that if an item has 2 categories it shows as 2 rows, if it has 3
categories, it shows 3 times. Any ideas?
Use SELECT DISTINCT rather than SELECT

--
Remove caps to reply


Reply With Quote
  #5  
Old   
cmgmyr
 
Posts: n/a

Default Re: Complex Query - 05-09-2008 , 03:27 PM



On May 9, 1:45*pm, PleegWat <pleegwat.REM... (AT) CAPS (DOT) telfort.nl.INVALID>
wrote:
Quote:
On Thu, 08 May 2008 15:08:31 -0700, cmgmyr wrote:
On May 8, 4:39*pm, "Rik Wasmus" <luiheidsgoe... (AT) hotmail (DOT) com> wrote:
SELECT p.id, p.styleno, t1.name AS category1, t2.name as category2,
t3.name as category3, p.description, p.price, p.sort
*FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parentid = t1.id LEFT JOIN categories
AS t3 ON t3.parentid = t2.id INNER JOIN products AS p ON p.category =
COALESCE(t3.id,t2.id,t1.id);

Thank you very much for that. It's very close. The only problem is, is
that if an item has 2 categories it shows as 2 rows, if it has 3
categories, it shows 3 times. Any ideas?

Use SELECT DISTINCT rather than SELECT

--
Remove caps to reply
Thanks for the reply. I did try that with some other alterations:

SELECT DISTINCT(p.id), p.styleno, t1.name AS category1, t2.name as
category2, t3.name as category3, p.description, p.price, p.sort
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.parentid = t1.id
LEFT JOIN categories AS t3 ON t3.parentid = t2.id
INNER JOIN products AS p ON p.category = COALESCE(t3.id,t2.id,t1.id)
GROUP BY(p.id)
ORDER BY p.id

This is coming up with 604 records total (there are actually 607
products) I did some looking and it's not pulling any items that are
assigned to a sub-category with sub-sub-categories for some reason.

Category 1
- Category 2 <~~~ Not pulling these products
-- Category 3

Is there any reason for this?

Thanks!
-Chris


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.