ФорумРазработкаБазы данных → Список последних добавленных ID.

Список последних добавленных ID.

  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 15 марта 2009 г. 11:21

    Предположим в таблицу добавляется несколько записей
    INSERT INTO tags (phrase) VALUES 
    ('first'),
    ('second'),
    ('third')

    Нужно получить значения автоинкрементного поля для всех этих записей. Варианты:
    a) заново искать эти значения в базе
    SELECT tag_id FROM tags WHERE phrase IN ('first', 'second', 'third')

    b) упорядочить по tag_id и выбрать первые записи
    SELECT tag_id FROM tags ORDER BY tag_id DESC LIMIT 3

    с) вставлять записи отдельными insert'ами и смотреть last_insert_id каждый раз

    Как лучше сделать?


    И ещё вопрос. Запрос для построения облака получается каким-то громоздким:
    SELECT 
    tags.phrase,
    COUNT(tags_entities.tag_id) AS num
    FROM tags_entities
    LEFT JOIN tags ON tags_entities.tag_id=tags.tag_id
    GROUP BY tags.tag_id
    ORDER BY num DESC
    LIMIT 10


    Может стоит сделать в таблице тегов дополнительное поле [tt]tags_count[/tt] и обновлять его при изменении таблицы связей (вроде, это называется "денормализация")?
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 15 марта 2009 г. 11:41, спустя 19 минут 49 секунд

    Timur, выбирай между a и b, вариант с отпадает.
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 15 марта 2009 г. 11:46, спустя 5 минут 13 секунд

    Вас изнасиловал Timurib.
    Вы потеряли 1.11 калорий энергии:)


    =D
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 15 марта 2009 г. 12:00, спустя 13 минут 33 секунды

    xD
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 15 марта 2009 г. 12:29, спустя 28 минут 59 секунд

    Есть у меня подозрение, что last_insert_id вернет последнюю, а предыдущие обязательно будут иметь упорядоченные значения, каждый на 1 меньше предыдущего. Надо проверить. Если это так, то это самый правильный метод, ибо если делать любой SELECT после INSERT нет никаких гарантий, что еще один INSERT между ними не проскочит.

    ЗЫ. Главное правило разработчика высоконагруженных систем: "Не бойся денормализации!". ))))))))
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 15 марта 2009 г. 13:16, спустя 47 минут 30 секунд


    Есть у меня подозрение, что last_insert_id вернет последнюю, а предыдущие обязательно будут иметь упорядоченные значения, каждый на 1 меньше предыдущего. Надо проверить. Если это так, то это самый правильный метод, ибо если делать любой SELECT после INSERT нет никаких гарантий, что еще один INSERT между ними не проскочит.

    вроде идеальный вариант, спасибо )

    ЗЫ. Главное правило разработчика высоконагруженных систем: "Не бойся денормализации!". ))))))))

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


    Вас изнасиловал Timurib.
    Вы потеряли 1.11 калорий энергии:)


    =D
    йа кабанчег, да )
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 15 марта 2009 г. 13:19, спустя 2 минуты 32 секунды

    я для тегов веду сводную таблицу. где есть tag,count и выборки вида select from tag_cloud order by count desc limit 10 и все.
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!