Поиск по двум таблицам, объединить поисковый запрос

grafen

Новичок
Всем привет. Нужно сделать поиск по двум полям из разных таблиц. Сделал так:

PHP:
$query="(SELECT name FROM tovarplus WHERE name LIKE '%".$word."%') UNION (SELECT name FROM tovar WHERE name LIKE '%".$word."%')";
$sql = mysql_query($query) or die("Запрос ошибочный");

В таблице `tovarplus` есть поле `idtovar`, которое содержит `id` записи из таблицы `tovar` - таким образом они пересекаются. Т.е. в таблице `tovar` хранится общее название группы, допустим "Молоко `Грустный молочник`", а в `tovarplus` хранятся разновидности, такого вида - "0,5 л.", "1 литр", "2 литра".

Как сделать так, чтобы если в поиске ввели "молоко 1 литр", вывелась бы запись из таблицы `tovarplus`.

Заранее спасибо!!!
 

SiZE

Новичок
Разбей строку на слова. Сделай три условия для поиска, за каждое совпадение по одному из условий начисляй баллы: а) по строке целиком = 10 баллов б) по соседним словам, т.е. "молоко 1", "1 литр" = 5 баллов в) каждое слово в отдельности = 1 балл. Просуммировав баллы полученные при выборке каждой записи ты узнаешь какую запись выводить первой. Релевантность йопт.
 

grafen

Новичок
Спасибо за ответ, но мне пока не нужно выводить с релевантностью, моя задача хотя бы вывести записи :) Этот запрос выводит записи, если нашлось совпадение в одной из таблиц. А мне нужно как-то склеить поля name из двух разных таблиц, учитывая между ними связь по полю `idtovar`. Или я всё-таки не в ту сторону смотрю?
 

fixxxer

К.О.
Партнер клуба
В лоб - explode по пробелу, LIKE '%word1%' OR LIKE '%word2%'... в обе, и join - но это ОЧЕНЬ медленно. Хотя если таблицы небольшие совсем, то подойдёт.

Не в лоб - sphinx :)
 

Kem_Steep

Новичок
grafen, если я правильно понимаю вашу задачу, то вот:
PHP:
SELECT CONCAT( t.name, tp.name ) name
FROM tovar t, tovarplus tp
WHERE t.id = tp.idtovar
AND (t.name LIKE '%".$word."%' OR tp.name LIKE '%".$word."%')
 
Сверху