Search code examples
phpmysqlsqlmysql-error-1054

Strange MYSQL Errors


My Query in file looks like this in the php file:

SELECT
            p.products_id as v_products_id,
            p.products_model as v_products_model,
            p.products_image as v_products_image,
            p.products_price as v_products_price,
            p.products_sku as v_products_sku,
            p.products_upc as v_products_upc,
            p.products_weight as v_products_weight,
            p.products_date_added as v_date_added,
            p.products_date_available as v_date_avail,
            p.products_tax_class_id as v_tax_class_id,
            p.products_quantity as v_products_quantity,
            p.manufacturers_id as v_manufacturers_id,
            subc.categories_id as v_categories_id
            FROM
            zen_products as p,
            zen_categories as subc,
            zen_products_to_categories as ptoc
            WHERE
            p.products_id = ptoc.products_id AND
            p.products_model = 'M150XN05' AND
            ptoc.categories_id = subc.categories_id

I am getting an error returned: MySQL error 1054: Unknown column 'p.produc1925ts_tax_class_id' in 'field list' When executing:

SELECT
            p.products_id as v_products_id,
            p.products_model as v_products_model,
            p.products_image as v_products_image,
            p.products_price as v_products_price,
            p.products_sku as v_products_sku,
            p.products_upc as v_products_upc,
            p.products_weight as v_products_weight,
            p.products_date_added as v_date_added,
            p.products_date_available as v_date_avail,
                    -- extra 1925 here
            p.produc1925ts_tax_class_id as v_tax_class_id,
            p.products_quantity as v_products_quantity,
            p.manufacturers_id as v_manufacturers_id,
            subc.categories_id as v_categories_id
            FROM
            zen_products as p,
            zen_categories as subc,
            zen_products_to_categories as ptoc
            WHERE
            p.products_id = ptoc.products_id AND
            p.products_model = 'M150XN05' AND
            ptoc.categories_id = subc.categories_id

Whats going on how are the extra "1925" getting placed into the middle of the selection? Im at a loss, I have tried everything I can think of that could possibly be causing this.

Code in entirety is here http://pastebin.com/embed_iframe.php?i=Q2RHT00W


Solution

  • MySQL doesn't parse implicit joins as you would expect.

    (Quote removed because it was the wrong paragraph, but this IS a known bug which I have run into before!)

    To avoid confusion, I'd recommending using explicit joins instead:

    zen_products as p,
    zen_categories as subc,
    zen_products_to_categories as ptoc
    WHERE
    p.products_id = ptoc.products_id AND
    p.products_model = 'M150XN05' AND
    ptoc.categories_id = subc.categories_id
    

    Becomes

    zen_products as p
    JOIN zen_products_to_categories as ptoc
        ON p.products_id = ptoc.products_id
    JOIN zen_categories as subc
        ON ptoc.categories_id = subc.categories_id
    WHERE p.products_model = 'M150XN05'