MySQL Количество элементов в категории

0

Я не очень хорошо понимаю MySQL, вот структуры таблиц, которые я использую.

пользователей

id | first_name | last_name | имя пользователя | пароль

категории

id | user_id | имя | Описание

ссылка

id | user_id | category_id | имя | URL | описание | date_added | hit_counter

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

id | user_id | имя | описание | link_count

В настоящий момент у меня есть этот запрос, но он возвращает строки только для категорий, имеющих ссылки. Он должен возвращать строки для категорий, у которых нет ссылок (пустые категории).

SELECT категории. *, COUNT (links.id) FROM категории LEFT JOIN ссылки ON categories.id = links.category_id;

Как сделать этот запрос? Спасибо.

Теги:
join

3 ответа

2
Лучший ответ

мы не можем выбрать таблицу dot "star" с агрегатом.

что вы хотите сделать, это что-то вроде (псевдокод):

select
    categories.field1,
    categories.field2,
    {etc.}
    count(links.id)
from categories
left join links
    on categories.id = links.category_id
group by
    categories.field1,
    categories.field2,
    {etc.}

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

  • 1
    почему мы не можем сделать точку таблицы «звезда» с агрегатом? мы можем сделать ... этот запрос будет выполнять SELECT категории. *, COUNT (links.id) ИЗ категорий ВЛЕВО СОЕДИНЯЕТСЯ НА СВЯЗИ category.id = ссылки. category_id группа по категориям.id;
  • 0
    Вы абсолютно правы, конечно. :) но в контексте предыстории плаката: «Я не очень хорошо понимаю mysql», я не хотел давать более подробное объяснение того, какие поля, перечисленные в функции агрегирования, должны быть перечислены в рамке группы. так как большинство людей лениво пишут счетчик (*) вместо конкретного счетчика полей (имя поля), как вопросы автора. поэтому я пошел с общим эмпирическим объяснением: «что бы вы ни выбрали, скопируйте эти поля в группе по блокам». я понимаю, что это "плохое" оправдание. так жаль.
0

Чтобы отменить alien052002 ответ, чтобы соответствовать вашему конкретному вопросу, необходимо следующее (непроверенное):

select c.id,
    c.user_id,
    c.name,
    c.description,
    count(l.link_count)
from categories c
left join links l on l.category_id = c.id
group by c.id, c.user_id, c.name, c.description
0

попробуйте это

SELECT categories.*, COUNT(links.id) FROM categories LEFT JOIN links ON categories.id=links.category_id group by categories.id;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню