#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. Очень вдохновляющее решение. Спасибо!