Самый быстрый способ реализовать поиск по списку в MySQL

#php #mysql #algorithm

#php #mysql #алгоритм

Вопрос:

Какой самый лучший (быстрый) способ реализовать поиск по списку в MySQL? Мой конкретный случай заключается в следующем:

  • У меня есть список правил (например {1, 3, 11, 5, 6, 9, 1232, 4}). Это может быть реализовано в PHP или MySQL.
  • У меня есть таблица в DB, в которой перечислены применяемые правила (например, {1, 3, 6}) [таблица «applied»]
  • Я должен выбрать из списка правил первое, которое еще не было применено (в примере результат равен 11, потому что 1 и 3 уже были применены).
  • Когда выбрано правило, оно выполняется (связанное с ним действие) и «примененная» таблица обновляется (в примере приложение вставляет 11 в таблицу : {1, 3, 6, 11})

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

Комментарии:

1. Моим первым подходом было получить всю информацию из ‘applied’ (ВЫБЕРИТЕ * ИЗ ‘applied’) и выполнить операцию на PHP. Но это кажется слишком тяжелым для реального приложения 🙂

Ответ №1:

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

 SELECT r.* 
FROM rules r 
LEFT JOIN applied a ON (a.rule_id = r.id)
WHERE a.rule_id IS NULL
ORDER BY r.id
LIMIT 1
  

Затем вы выполняете действие, связанное с правилом, и вставляете новую запись в applied таблицу.

Комментарии:

1. Очень вдохновляющее решение. Спасибо!