Помогите, пожалуйста, составить sql-запрос

(Ответов: 3, Просмотров: 479)
  1. Новичок Аватар для nado5
    • Регистрация: 23.11.2011
    • Сообщений: 13
    • Репутация: 0
    Всем привет, спасибо за помощь.

    Есть table1
    uid maxcount
    1 0
    2 0
    3 0
    4 0
    5 0

    И table2
    key_id category_id
    1 1
    1 2
    2 4
    3 8
    4 9

    У нас в table1 список айдишников категорий
    В table2 список key_id и category_id, которые к ним относятся. К одной key_id может относится много category_id
    uid это то же самое, что и category_id

    Я создал первой запрос
    SELECT `category_id`, COUNT(*) as maxcount FROM `table2` GROUP BY `category_id` HAVING count(*)>1

    Получил табличку
    category_id maxcount
    1 100
    2 600
    3 750
    4 250
    5 250

    т.е. я типа подсчитал количество key_id для каждой категории

    Теперь я хочу обновить вторую табличку при условии, что uid=category_id

    Пытаюсь сделать такой запрос
    Update `table1`
    SET maxcount = (SELECT `category_id`, COUNT(*) as maxcount FROM `table2` GROUP BY `category_id` HAVING count(*)>1)
    WHERE `table1.uid` = `table2.category_id`;

    Тут он выдает ошибку unknown column table1.uid
    Последний раз редактировалось nado5; 24.09.2015 в 23:37.
    • 0
  2. Sunshine reggae Аватар для OKyJIucT
    • Регистрация: 02.09.2011
    • Сообщений: 3,240
    • Репутация: 1830
    • Webmoney BL: ?
    А где вы получаете `table2.category_id` для того, чтобы вставлять в условие where? И еще один момент - я не уверен, что можно записать такой результат запроса в поле maxcount, рам ведь не строку получаете, а несколько значений, причём сразу два поля.
    Я бы не стал хранить количество данных из одной таблицы в другой - при любом изменении второй таблицы надо будет обновлять первую. Лучше считайте при необходимости количества, храните в кеше, а при изменении второй таблицы просто обнуляйте кеш.
    • 0
  3. Новичок Аватар для nado5
    • Регистрация: 23.11.2011
    • Сообщений: 13
    • Репутация: 0
    В общем, мне тут подсказали, надо джоинить. Если кому понадобится:

    update table1 t
    inner join (SELECT `category_id`, COUNT(*) as maxcount FROM `table2` GROUP BY `category_id` HAVING count(*)>1 )q
    on q.category_id =t.uid
    set t.maxcount = q.maxcount
    • 0
  4. Дипломник Аватар для SEO_MONSTR
    • Регистрация: 13.07.2015
    • Сообщений: 242
    • Репутация: 37
    • Webmoney BL: ?
    Можно же было сделать сложным вложенным select, всегда так делаю. Правда можно запутаться.
    • 0

Похожие темы

Темы Раздел Ответов Последний пост
Помогите составить условие
Web программирование 2 09.05.2014 13:44
Помогите составить правельный роботс тхт для dle
Вопросы от новичков 7 24.07.2012 23:23
Помогите составить ТЗ для копираайтера
Вопросы от новичков 1 22.02.2012 21:01
Помогите составить robots.txt
Вопросы от новичков 4 09.11.2011 18:07
Помогите составить ТЗ
Прочее 0 04.04.2011 19:41

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры