@MdaUZH

COUNT(*) в SQL вместе с GROUP BY, неожиданный результат?

Всем привет.
Небольшая заминочка вышла..
делаю выборку из таблицы и получаю результат вида:
id | text | parent
1 | text | 2
2 | text | 2
3 | text | 3
и т.д, не суть, суть в том что parent у многих полей одинаковый, как объеденить выборку?
сделать так, чтобы parent не повторялся?

пробовал GROUP BY parent, но тут проблема встала с COUNT(*),
когда делаю COUNT(*) с GROUP BY,
то результат получается такой:
COUNT(*)
2
3
2
2
2
1
2
2
2
2
2
2
2
2
2
4


Подскажите пожалуйста, как сделать так, чтобы определенное поле не повторялось (объеденить поля), но в тоже время не ломать COUNT(*) ?

UPD:

Есть 3 таблицы:
Рецепты:
id | name | description
Компоненты рецептов:
id | parent_id | recept_id
где: parent_id -> id компонента (отдельная таблица здесь не использую)
recept_id -> id рецепта, где этот компонент используется

Компоненты которыми обладает пользователь:
id | user_id | parent_id
где : user_id -> id пользователя чей компонент, parent_id -> id компонента (отдельная таблица здесь без неё)

Задача:

Имея только ID пользователя, найти все рецепты которые он может приготовить(исходя из его компонентов)

Делаю так:
SELECT r.*, cr.*, uc.*
FROM user_component AS uc
JOIN component_recept AS cr ON cr.parent_id = uc.parent_id
JOIN recept AS r ON r.id = cr.recept_id
WHERE uc.user_id
IN ( 9 )

И все хорошо, но только проблема в том, что в результате много "одинаковых" ячеек...
как объеденить выборку, чтобы небыло одинаковых id рецепта?

Пробовал GROUP BY, но результаты и проблема чуть выше, спасибо
  • Вопрос задан
  • 1160 просмотров
Решения вопроса 2
dmlogv
@dmlogv
Универсальный человек
Задача не ясна, да и вы бы запрос приложили...

Вообще, если нужно вывести parent'ы и число строк по ним то так:
SELECT parent, COUNT(1)
FROM tbl
GROUP BY parent
.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Находим компоненты, имеющиеся у пользователя, затем находим рецепты, которые он НЕ может приготовить, затем выбираем те, которые может.
SELECT `r`.`id`, `r`.`name`, `r`.`description`
  FROM `recept`
  LEFT JOIN (
    SELECT DISTINCT `cr`.`parent_id` AS `parent_id`
      FROM `component_recept` AS `cr`
      LEFT JOIN (
        SELECT `parent_id`
          FROM `user_component` 
          WHERE `user_id` = :uid
      ) AS `uc` ON `uc`.`parent_id` = `cr`.`parent_id`
      WHERE `uc`.`parent_id` IS NULL
    ) AS `xr` ON `xr`.`parent_id` = `r`.`id`
    WHERE `xr`.`parent_id` IS NULL
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы