Хобрук: Ваш путь к мастерству в программировании

Как получить образцы из базы данных?

Предположим, у меня есть много помеченных объектов (например, посты в блоге с тегами) для хранения в базе данных SQL. Например:

post1: work
post2: work, programming, java, work
post3: work, programming, sql
post4: vacation, photo
post5: vacation
post6: photo

Предположим также, что у меня есть список тегов

work, vacation

Теперь я хочу получить посты sample размера 2, то есть два поста с тегами из списка. Например

sample1: post1 and post2
sample2: post1 and post4
sample3: post2 and post5

Кроме того, я бы хотел, чтобы sample содержал все теги в списке. Обратите внимание, что sample1 не соответствует этому требованию, так как в наборе тегов выборочных сущностей нет тега vacation из списка.

Я хотел бы также, чтобы все вхождения тегов были равны. Рассмотрим 2 образца размера 4.

sample1: post1, post2, post3, post6
sample2: post1, post3, post4, post5

Обратите внимание, что sample1 не соответствует этому требованию, так как тег work встречается в нем 3 раза, а vacation — только один раз.

Мой вопрос: как спроектировать реляционную базу данных и SQL-запрос для извлечения образцов заданного размера?


Ответы:


1

Если вы хотите получить все сообщения с тегами в списке с разделителями-запятыми:

select postid
from post_tags
where find_in_set(tagid, @LIST) > 0
group by postid
having count(distinct tagid) = 1+length(@LIST) - length(replace(',', @LIST, ''));

Если вы хотите просто «образец» из них:

select postid
from (select postid
      from post_tags
      where find_in_set(tagid, @LIST) > 0
      group by postid
      having count(distinct tagid) = 1+length(@LIST) - length(replace(',', @LIST, ''))
     ) t
order by rand()
limit 5
17.08.2013
  • Благодарю вас! Не могли бы вы объяснить эту having count(distinct tagid) = 1+length(@LIST) - length(replace(',', @LIST, '')) вещь ? 17.08.2013
  • @Майкл . . . Это подсчет количества элементов в строке. Это число запятых плюс один. 18.08.2013
  • Новые материалы

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

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

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..

    React Hooks: основы деструктуризации массива
    Kent C. Dodds написал классный пост о том, как грядущая функция React под названием Hooks работает на капоте. Предстоящий хук React useState основан на деструктурировании массива, давайте..

    Пакеты R, используемые в Tesla
    Добро пожаловать обратно! R — очень популярный язык программирования, используемый множеством компаний, включая Tesla! Итак, давайте взглянем на некоторые пакеты R, которые использует Tesla...

    Сокращение и слияние токенов для эффективных моделей VL: обзор
    Часто в задачах, связанных с компьютерным зрением и НЛП, вычислительно затратная и требующая большого объема памяти обработка становится препятствием для более быстрого логического вывода модели, а..