2014-09-15 8 views
0

Надеюсь, вы сможете помочь. Я хочу выполнить поиск по ключевым словам в продуктах, включая несколько таблиц. Но не каждый продукт имеет какие-либо записи в каждой таблице ...Запрос Mysql с несколькими таблицами?

Пример

table 'product' 
id  product_name  description 
1  my product  this is my favorite product 
2  another item  that is another product 
3  blue car   for driving away 

table 'keywords' 
prod_id keywords 
2   car, product, blue 

Итак, теперь я хочу, чтобы все продукты, имеющие «автомобиль» в «PRODUCT_NAME», «описание» или " ключевые слова

только с помощью простого запроса MySQL будет иметь только те продукты, как результат, которые в обеих таблицах:

SELECT A.id FROM product A, keywords B WHERE A.ID = B.product_id AND.... 

Я попытался LEFT JOIN - но это было все три продукта, как результат (возможно, я сделал это неправильно):

SELECT A.id FROM product A LEFT JOIN keywords B ON A.id = B.prod_id AND (A.product_name LIKE '%car%' OR A.description LIKE '%car%' OR B.keywords LIKE '%car%') 

Может ли кто-нибудь помочь? Благодаря & уважением Jan

ответ

1

Ставишь AND в LEFT JOIN инструкции вместо WHERE , Попробуйте

SELECT `A.id` FROM product AS `A` 
LEFT OUTER JOIN keywords AS `B` ON `A.id` = `B.prod_id` 
WHERE (`A.product_name` LIKE '%car%' OR `A.description` LIKE '%car%' OR `B.keywords` LIKE '%car%') 

берегись, LIKE '%car%' также подберет That's my favorite cardigan.

RLIKE '[[:<:]]word[[:>:]]' может быть лучше.


Ресурсы:

Mysql RegExp для RLIKE: http://dev.mysql.com/doc/refman/5.0/fr/regexp.html

1

Это может быть сделано с помощью объединения:

(select id from product where product_name LIKE '%car%' OR description LIKE '%car%') 
union 
(select prod_id from keywords where keywords LIKE '%car%'); 
2

лучший способ заключается в использовании профсоюзу

select id from product where product_name LIKE '%car%' OR description LIKE '%car%' 
    union 
    select prod_id as id from keywords where keywords LIKE '%car%' ;