У меня есть таблица с двумя отношениями.SQL-поиск в отношениях
Структура данных и пример:
A/Employee
id fields
1 Mike Miller
2 Lisa Miller
B/Skill
aid name
1 SQL
1 PHP
C/Language
aid name
1 German
мне нужен запрос, который показывает результаты от основной таблицы и поиска по ключевому слову в таблицах отношения.
Поиск Miller -> Майк Миллер, Лиза Миллер
Поиск SQL -> Mike Miller
Поиск Немецкий -> Майк Миллер
Есть 10.000 строк в основной таблице и 100.000 связи. Я пробовал его с JOIN
, но запрос очень медленный.
Кроме того, те же строка из основной таблицы отображаются в целях несколько раз, когда Есть более одного соотношения для этой строки:
Поиск Miller
возвратов: Майк Миллер, Майк Миллер
(Mike Miller отображается более чем один раз)
SELECT fields
FROM A
JOIN B ON id = B.aid JOIN C ON id = C.aid
WHERE fields LIKE '%"+$search+"%' OR B.name LIKE '%"+$search+"%' OR C.name LIKE '%"+$search+"%'"
Я пытался исправить себе cond с DISTINCT
, но теперь строки без отношений не отображаются.
Я хочу показать каждую строку из главного стола ровно один раз. Какой запрос мне нужен?
Не могли бы вы привести пример вашего ожидаемого результата? –
LIKE - это медленный поиск, поскольку индексы не используются. – jarlh
LIKE может быть довольно медленным. Чтобы повысить эффективность, вы можете использовать MATCH с FULLTEXT INDEX. http://makandracards.com/makandra/12813-performance-analysis-of-mysql-s-fulltext-indexes-and-like-queries-for-full-text-search –