sql query help join (я думаю) - PullRequest
       2

sql query help join (я думаю)

0 голосов
/ 11 ноября 2011

Мне трудно понять, как я могу получить результаты, только когда products.published, product_types.published и product_cats.published = 1, но мой запрос не работает. Пожалуйста, помогите:

SELECT 
  `products`.`title`,
  `products`.`menu_id`,
  `products`.`short_description`,
  `products`.`datasheet_icon`,
  `products`.`datasheet`,
  `products`.`ordering`,
  `products`.`product_type_id`,
  CASE WHEN CHAR_LENGTH(`products`.`alias`)
    THEN CONCAT_WS(':', `products`.`id`, `products`.`alias`) 
    ELSE `products`.`id` 
  END AS slug 
FROM 
  `products`, 
  `product_cats`,
  `product_types`
WHERE 
  `products`.published=1 AND
  `product_cats`.published=1 AND
  `product_types`.published=1 AND
  `products`.`product_cat_id`='42' AND
  `product_types`.`id` IN (1,40,48,49,50)
GROUP BY `products`.`id`
ORDER BY `product_types`.`ordering`, `products`.`ordering`

Ответы [ 3 ]

0 голосов
/ 11 ноября 2011

Я хочу предположить, что таблицы product_cats и product_types также содержат идентификаторы продуктов.И я называю их pid в этом:

SELECT 
    p.title,
    p.menu_id,
    p.short_description,
    p.datasheet_icon,
    p.datasheet,
    p.ordering,
    p.product_type_id,
    CASE 
        WHEN CHAR_LENGTH(p.alias)
        THEN CONCAT_WS(':', p.id, p.alias) 
        ELSE p.id 
    END AS slug 
FROM products p
    JOIN product_cats pc ON pc.pid = p.id
    JOIN product_types pt ON pt.pid = p.id
WHERE 
    p.published=1 AND
    pc.published=1 AND
    pt.published=1
GROUP BY p.id
ORDER BY pt.ordering,p.ordering
0 голосов
/ 11 ноября 2011

Боюсь, ваш запрос немного беспорядок.Без структур таблиц мы можем только догадываться о том, что вы пытаетесь сделать.Важная информация о том, как три таблицы связаны друг с другом.

Обратите внимание на следующее:

  1. Вы используете три таблицы в своем SELECT, но не присоединяетесь к ним,Вам нужно будет явно присоединиться к таблицам, которые вы используете.Отсутствие явных JOIN является причиной того, что вы возвращаете слишком много строк и вынуждены использовать GROUP BY для устранения дубликатов.Ваше окончательное решение не должно использовать GROUP BY.

  2. Если вы ищете только product.cat_id из 42, я предполагаю, что вы знаете, опубликован ли cat_id, и вам не нужнозадействовать таблицу product_cats.Это правильно?

  3. Предположительно, есть столбец product.type_id или что-то подобное.Поскольку вы ищете их ограниченное количество, знаете ли вы заранее, что идентификаторы в этом списке опубликованы?

0 голосов
/ 11 ноября 2011

Вам нужно объединить таблицы!

FROM 
`products`, 
`product_cats`,
`product_types`

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...