Странные ошибки MYSQL - PullRequest
       13

Странные ошибки MYSQL

1 голос
/ 22 июля 2011

Мой запрос в файле выглядит так в файле php:

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

Я получаю сообщение об ошибке: Ошибка MySQL 1054: неизвестный столбец «p.produc1925ts_tax_class_id» в «списке полей» При выполнении:

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

Что происходит, как дополнительные «1925» попадают в середину выбора? Я в растерянности, я перепробовал все, что мог придумать, это могло быть причиной этого.

Код целиком здесь http://pastebin.com/embed_iframe.php?i=Q2RHT00W

1 Ответ

0 голосов
/ 25 июля 2011

MySQL не анализирует неявные объединения, как вы ожидаете.

(Цитата удалена, потому что это был неправильный абзац, но это известная ошибка, с которой я столкнулся раньше!)

Чтобы избежать путаницы, я бы рекомендовал вместо этого использовать явные объединения:

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

Становится

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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...