2014-12-24 4 views
2

у меня есть 4 различных таблиц названыMySql получить соответствующие имена из разных таблиц

ps_product 
ps_product_lang 
ps_category_lang 
ps_manufacturer 

Стол для ps_product, как это

id_product id_manufacture id_category_default 
1   1    5 
2   1    7 
3   1    9 
4   1    10 
5   1    11 
6   1    11 

ps_product_lang подобно этому

id_product name 
1   Faded Short Sleeve T-shirts 
2   Blouse 
3   Printed Dress 
4   Printed Dress 
5   Printed Summer Dress 
6   Printed Summer Dress 
7   Printed Chiffon Dress 

ps_category_lang как это

id_category name 
1   paints 
2   Home 
3   Women 
4   Tops 
5   T-shirts 
6   Tops 
7   Blouses 

ps_manufacturer стол как этот

id_manufacturer name 
1    Fashion Manufacturer 

Теперь здесь я хочу, чтобы, когда я буду выбирать имя с как тогда он покажет ДАННЫЕ из этих имен. Например, когда я будет искать что-то вроде 'paint%', тогда он должен отображать соответствующие имена от названия продукта, категории продукта и имени производителя Так может кто-нибудь сказать мне, как присоединиться к этим таблицам, чтобы получить значения? Любая помощь и предложения будут действительно неприемлемы. Благодаря

+0

Я бы установил полный текстовый поиск mysql для эффективного решения. –

+0

Покажите ожидаемый результат, который вы хотите получить из таблиц при поиске u, чтобы его было ясно, что вам нужно. – varun

ответ

0

Попробуйте это:

SELECT pl.name, cl.name, m.name 
FROM ps_product p 
LEFT OUTER JOIN ps_product_lang pl ON p.id_product = pl.id_product AND pl.name LIKE 'paint%' 
LEFT OUTER JOIN ps_category_lang cl ON p.id_category_default = cl.id_category AND cl.name LIKE 'paint%' 
LEFT OUTER JOIN ps_manufacturer m ON p.id_manufacture = m.id_manufacture AND m.name LIKE 'paint%' 
WHERE pl.id_product IS NOT NULL OR 
     cl.id_category IS NOT NULL OR 
     m.id_manufacture IS NOT NULL; 

ИЛИ

SELECT pl.name, cl.name, m.name 
FROM ps_product p 
INNER JOIN ps_product_lang pl ON p.id_product = pl.id_product 
INNER JOIN ps_category_lang cl ON p.id_category_default = cl.id_category 
INNER JOIN ps_manufacturer m ON p.id_manufacture = m.id_manufacture 
WHERE pl.name LIKE 'paint%' OR 
     cl.name LIKE 'paint%' OR 
     m.name LIKE 'paint%'; 
+0

Как выбрать только имя. Потому что у меня есть большая база данных, а select * работает медленно. – NewUser

+0

@saharsh это не соответствует именам, если их идентификатор отсутствует в таблице ps_product, поэтому вы не получите все необходимые данные. – varun

1

Попробуйте Inner Регистрация на всех четырех таблиц, а затем сделать «и» между всеми полями имени, если вы хотите, вам поле, начните с красок в любой из этих трех таблиц, таких как:

SELECT * 
FROM ps_product pp INNER JOIN ps_product_lang ppl ON pp.id_product   = ppl.id_product 
        INNER JOIN ps_category_lang pcl ON pp.id_category_default = pcl.id_category 
        INNER JOIN ps_manufacturer pm ON pp.id_manufacturer  = pm.id_manufacturer 
WHERE ppl.name like 'paint%' 
AND pcl.name like 'paint%' 
AND pm.name like 'paint%' 

Примечание. Если вы хотите, чтобы поиск краски присутствовал в любой из трех таблиц, используйте «ИЛИ» между условиями вместо «И».

+0

Как выбрать только имя. Потому что у меня есть большая база данных, а select * работает медленно. – NewUser

0
SELECT x.id,y.name,z.name,a.name 
FROM ps_product x 
FULL OUTER JOIN ps_product_lang y 
ON x.id_product = y.id_product 
FULL OUTER JOIN ps_category_lang z 
ON x.id_category_default = z.id_category 
FULL OUTER JOIN ps_manufacturer a 
ON x.id_manufacture = a.id_manufacture 
WHERE a.name LIKE 'paint%' 
OR y.name LIKE 'paint%' 
OR z.name LIKE 'paint%' 

Полное внешнее объединение требуется здесь, потому что вы хотите, чтобы соответствовать все имена, так что получите все данные и совпадают с шаблоном «краска%» и отображать совпадающие строки. Попробуйте один раз

Смежные вопросы