В течение нескольких дней я пытался найти решение для извлечения информации из другой таблицы после выполнения поиска с использованием «Сопоставление с»
Мой первый запрос позволяет вам находить результаты в соответствии с поиском. Работает хорошо без проблем. Вот пример с поиском "iPhone 11".
SELECT p.ean, p.id, p.best_price, title, slug, description,
MATCH(title) AGAINST('"iphone 11"' IN BOOLEAN MODE) AS score_title_exact,
MATCH(title) AGAINST("*iphone* *11*" IN BOOLEAN MODE) AS score_title,
MATCH(slug) AGAINST('"iphone-11"' IN BOOLEAN MODE) AS score_slug_exact,
MATCH(slug) AGAINST("*iphone* *11*" IN BOOLEAN MODE) AS score_slug,
(IF (brand LIKE "%iphone%" OR brand LIKE "%11%", 1,0)) AS brand_priority FROM products p
WHERE
(
MATCH(title) AGAINST('"iphone 11"' IN BOOLEAN MODE)
OR MATCH(title) AGAINST("*iphone* *11*" IN BOOLEAN MODE)
OR MATCH(slug) AGAINST('"iphone-11"' IN BOOLEAN MODE)
OR (IF (brand LIKE "%iphone%" OR brand LIKE "%11%", 1,0))
) AND p.`ean` != 0
ORDER BY top_vente DESC, brand_priority DESC, (score_title_exact*1+score_title*0.5+brand_priority*2+score_slug_exact*1+score_slug*0.8) DESC, score_title DESC, total_in_stock DESC, best_price DESC LIMIT 12
и запросом 2 в другой таблице (чтобы узнать запасы для каждого продукта EAN):
SELECT COUNT(*) FROM products_mp mp WHERE mp.in_stock = 1 AND mp.ean = p.ean
I попытался вставить второй запрос в первый в SELECT, но производительность очень плохая (около 180 секунд):
SELECT p.ean, p.id, p.best_price, title, slug, description,[...],
(SELECT COUNT(*) FROM products_mp mp WHERE mp.in_stock = 1 AND mp.ean = p.ean) AS stock
WHERE ...
Я также пробовал соединения, объединения, .... но я не достаточно опытен
У кого-нибудь есть решение моей проблемы?
Заранее спасибо