добавление полнотекстового запроса к существующему запросу - PullRequest
0 голосов
/ 30 августа 2010

Я изо всех сил пытаюсь выработать синтаксис для объединения нормального многотабличного запроса с полным текстом одной таблицы. Я не могу понять синтаксис

Это существующий синтаксис, который отлично работает:

SELECT * FROM products,categories,sub_categories 
WHERE products.approved = 1 
AND products.main_category = categories.id 
AND products.sub_category = sub_categories.id

Мои попытки добавить полный текст не сокращают его. Это запрос, который я пытаюсь использовать для поиска:

MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,details) 
AGAINST ('keyword') AS score FROM products 
WHERE MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,details) AGAINST('keyword')

Это то, что я придумал, но по (вероятно, очевидным) причинам, неизвестным мне, это не работает.

SELECT * FROM products,categories,sub_categories 
WHERE products.approved = 1 
AND products.main_category = categories.id 
AND products.sub_category = sub_categories.id
AND MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,details) 
AGAINST ('keyword') AS score FROM products 
WHERE MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,details) AGAINST('keyword')

Любая помощь будет высоко ценится!

Ответы [ 3 ]

0 голосов
/ 31 августа 2010

спасибо огромное за это. Я довольно хорошо с PHP и другими языками, но flakey с синтаксисом MySQL. Честно говоря, когда я смотрю на ваш код, все начинает становиться на свои места! Я могу видеть, как вы пришли к такому результату. Я обожгу, но выглядит хорошо.

0 голосов
/ 31 августа 2010

как бы добавить к этому 'order by product_name'? Я пробовал это, но результаты не в порядке правильно

SELECT * FROM products 
INNER JOIN product_categories on products.main_category = product_categories.id 
INNER JOIN product_sub_categories on products.sub_category = product_sub_categories.id 
WHERE products.approved = 1 AND products.main_category = 8 
ORDER BY products.product_name DESC LIMIT 0,25 

Это, однако, работает при добавлении поиска

SELECT * , 
MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,product_details) 
AGAINST ('keyword') AS score FROM my_products 
INNER JOIN my_product_categories on my_products.main_category = my_product_categories.id 
INNER JOIN my_product_sub_categories on my_products.sub_category = my_product_sub_categories.id 
WHERE my_products.approved = 1 AND 
MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,product_details) 
AGAINST('bath') ORDER BY my_products.product_name ASC LIMIT 0,25 
0 голосов
/ 30 августа 2010

Как минимум, вам нужно переместить «оценку» в предложение SELECT и объединить два предложения WHERE с AND.

SELECT *, 
  MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,details) 
  AGAINST ('keyword') AS score
FROM products,categories,sub_categories 
WHERE products.approved = 1 
  AND products.main_category = categories.id 
  AND products.sub_category = sub_categories.id
  AND MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,details) AGAINST('keyword')

Я также настоятельно рекомендую переписать весь запрос с использованием синтаксиса соединения ANSIчтобы сделать его более читабельным:

SELECT *, 
  MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,details) 
  AGAINST ('keyword') AS score
FROM products
  INNER JOIN categories on products.main_category = categories.id
  INNER JOIN sub_categories on products.sub_category = sub_categories.id
WHERE products.approved = 1 
  AND MATCH(product_name,code,tag_1,tag_2,tag_3,tag_4,tag_5,details) AGAINST('keyword')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...