Jump to content

MySQL5 - Left Join Placement


pitstop

Recommended Posts

Hi, this code works fine in MSQLv4 but I get an error in MySQL5. I know i have to move the left join to the end of the block but I am getting all goggle eyed trying to get it to work. The manual is not helping me much as I just seem to change the error.

 

I would really appreciate some help and pointers with this.

 

The code that works in MySQLv4 is:

$products_query_raw = "select m.manufacturers_name,
mrv.rec_v_id, 
p.products_id, 
pd.products_name, 
p.products_image, 
p.products_price, 
p.products_tax_class_id,                                              
p.products_date_added,
pd.products_description
from " . TABLE_PRODUCTS . " p, 
recently_view as rv, 
" . TABLE_PRODUCTS_DESCRIPTION . " pd 
left join " . TABLE_MANUFACTURERS . " m 
on p.manufacturers_id = m.manufacturers_id  
where p.products_id in (" . $prod_viewed . ")
and  p.products_status = '1' 
and p.products_id = rv.products_id  
and p.products_id = pd.products_id 
and pd.language_id = '" . (int)$languages_id . "' 
order by rv.rec_v_id";

 

The error I get in MySQLv5 is:

 

1054 - Unknown column 'p.manufacturers_id' in 'on clause'

 

select count(*) as total from products p, recently_view as rv, products_description pd left join manufacturers m on p.manufacturers_id = m.manufacturers_id where p.products_id in (25003789,25003638,25001258,25000669) and p.products_status = '1' and p.products_id = rv.products_id and p.products_id = pd.products_id and pd.language_id = '1' order by rv.rec_v_id

 

[TEP STOP]

 

I have tried moving the left join to after the first table (table products) without sucess, I suspect I am missing something simple but I just cannot see it.

 

Thank you,

Link to comment
Share on other sites

You're lucky it worked in mysql 4 -- you got very lucky that comma and JOIN had the same precedence.  It's bad to mix them; in fact, NEVER use comma and you'll never go astray.

 

You can cheat:

 

....
from ( " . TABLE_PRODUCTS . " p,
recently_view as rv,
" . TABLE_PRODUCTS_DESCRIPTION . " pd )
left join " . TABLE_MANUFACTURERS . " m
.....

 

Or, better yet, fix it:

$products_query_raw = "select m.manufacturers_name,
mrv.rec_v_id,
p.products_id,
pd.products_name,
p.products_image,
p.products_price,
p.products_tax_class_id,                                             
p.products_date_added,
pd.products_description
from " . TABLE_PRODUCTS . " p using ( products_id )
inner join recently_view as rv using ( products_id )
inner join " . TABLE_PRODUCTS_DESCRIPTION . " pd using ( products_id )
left join " . TABLE_MANUFACTURERS . " m using ( manufacturers_id )
where p.products_id in (" . $prod_viewed . ")
and  p.products_status = '1'
and pd.language_id = '" . (int)$languages_id . "'
order by rv.rec_v_id";

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.