2013-06-11 2 views
1

Я пытаюсь создать функцию поиска продукта на веб-сайте электронной коммерции, который я создаю, но у меня небольшие проблемы.поиск товара по 3 таблицам базы данных

У меня есть 3 таблицы (категория, sub_categories, продукты)

Категория полой таблицы: (CategoryId, CategoryName, активный, образ)

sub_categories поле таблицы: (CategoryId, CategoryName, parentCatID, активный, образ)

продукции полей таблицы: (ProductID, SHORTDESCRIPTION, longDescription, образ, CatID, subCatID, активный, цена, доставка, вес)

Im пытается получить свой поиск, чтобы найти продукт, если пользователь Ty pes в любой части краткого описания или длинного описания или если пользователь вводит какую-либо часть имен категорий или подкатегорий, он должен найти все продукты в этих категориях.

Я не знаю, делать ли JOIN или несколько SQL-запросов. честно говоря я уже был возиться с ним в течение нескольких часов, но havnt действительно получили в любом месте и теперь я снова на чертежной доске, с просьбой о помощи

моя первая попытка выглядела так:

$catSelect = mysqli_query($con,"SELECT * FROM categories WHERE categoryName LIKE '%{$term}%'"); 
      $row1 = mysqli_fetch_row($catSelect); 
$subCatSelect = mysqli_query($con,"SELECT * FROM sub_categories WHERE categoryName LIKE '%{$term}%' OR parentCatID = '%{$row1[0]}%'"); 
      $row2 = mysqli_fetch_row($subcatSelect); 
      $productSelect = mysqli_query($con,"SELECT * FROM products WHERE short_description LIKE '%{$term}%' OR long_description LIKE '%{$term}%' OR subCatID = '%{$row2[0]}%' OR catID = '%{$row1[0]}%'"); 

мой окончательный попытка выглядит так:

mysqli_query($con,"SELECT * FROM products INNER JOIN categories ON products.catID = categories.categoryID WHERE categories.categoryName LIKE '%{$term}%'") or die(mysqli_error()); 

Может ли кто-нибудь помочь мне с SQL-запросом, который мне нужно использовать?

+1

Ваши попытки запроса (даже если они ошибочны) помогут каждому понять ваш текущий уровень навыков с SQL и предложить соответствующее решение. Более того, чем больше усилий вы показываете, тем больше ответов вы получите –

+0

ok, редактирование для размещения ваших предложений (радикальное использование кнопки отмены) – Kevlar

ответ

3

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

SELECT 
    p.productID 
FROM 
    products p 
LEFT JOIN categories c 
    ON c.categoryID = p.catID 
LEFT JOIN sub_categories sc 
    ON sc.categoryID = p.subCatID 
WHERE 
    p.shortDescription LIKE '%keyword%' 
    OR p.longDescription LIKE '%keyword%' 
    OR c.categoryName LIKE '%keyword%' 
    OR sc.categoryName LIKE '%keyword%' 
+1

Я был просто написав точное высказывание сам, вы избили меня тоже. Я добрался до предложения WHERE до того, как вы ответили! В любом случае @Kevlar, если у вас есть эта работа, я предлагаю искать полный текстовый поиск в mysql, их немного сложнее понять, но они являются лучшей альтернативой LIKE при выполнении такого рода поиска (т.е. более быстрые и игнорирующие общие слова такие как «The Beatles» и «Beatles» в поиске исполнителя музыки, будут отличаться от тех, что есть в LIKE, но полнотекстовый текст будет игнорировать «THE») – Lee

+0

@ Хорошее предложение о поиске 'FULLTEXT' :) – Stephan

+0

Я обязательно посмотрю Это..im немного подтолкнули к времени на данный момент, и мои способности означают, что я должен держать его простым на данный момент – Kevlar

0

Почему вы не используете lucene-solr для этого?

+0

Я не знаю, что это ... googling now now – Kevlar

2

Вам необходимо выполнить соединение на всех трех таблицах с предложением where, которое запрашивает поля, которые вы хотите найти. Что-то вроде этого:

select * from 
products 
inner join categories on products.catID = categories.categoryID 
inner join sub_categories on products.subCatID = sub_categories.categoryID 
where 
products.shortDescription like '%query%' 
or products.longDescription like '%query%' 
or categories.categoryName like '%query%' 
or sub_categories.categoryName like '%query%' 
; 

где query является строка поискового запроса.

2

это может быть полезным для вас .....

SELECT * FROM products AS PT 
LEFT JOIN Categories AS CT ON CT.catID = PT.catID 
LEFT JOIN sub_categories AS SCT ON SCT.subCatID = PT.subCatID 
WHERE 
    PT.active = 'YES' AND 
    (PT.shortDescription LIKE '%shortDescription%' OR 
    PT.longDescription LIKE '%longDescription%' OR 
    CT.category LIKE '%category%' OR 
    SCT.categoryID LIKE '%sub category%') 

вы просто поставить свои значения с помощью PHP varrible вы можете получить результаты поиска.

+1

отступ, отступы, отступы. –

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