Как искать столбец, который не находится в той же таблице? - PullRequest
0 голосов
/ 18 января 2019

Этот удивительный запрос работает хорошо, и я так счастлив:

SELECT
post_id,
username,
post_title,
description,
post_tags,
post_cats,
MATCH(username) AGAINST (+(:keyword) IN BOOLEAN MODE)  AS  score_username,
MATCH(post_title) AGAINST (+(:keyword) IN BOOLEAN MODE)  AS  score_title,
MATCH(description) AGAINST (+(:keyword) IN BOOLEAN MODE) AS score_description,
MATCH(post_tags) AGAINST (+(:keyword) IN BOOLEAN MODE) AS score_tags,
MATCH(post_cats) AGAINST (+(:keyword) IN BOOLEAN MODE) AS score_cats
FROM topics
WHERE
MATCH(username) AGAINST (+(:keyword) IN BOOLEAN MODE) OR
MATCH(post_title) AGAINST (+(:keyword) IN BOOLEAN MODE) OR
MATCH(description) AGAINST (+(:keyword) IN BOOLEAN MODE)OR
MATCH(post_tags) AGAINST (+(:keyword) IN BOOLEAN MODE)OR
MATCH(post_cats) AGAINST (+(:keyword) IN BOOLEAN MODE)
ORDER BY is_online DESC, (score_username+score_title*0.5+score_description*0.4+score_tags*0.3+score_cats*0.2) DESC

Но теперь «описания» находятся в другом имени таблицы «themes2» с тем же «post_id» и одним столбцом на язык:

"description_en", "description_fr", "description_it".

Как я могу выбрать с тем же запросом эту другую таблицу, а затем заставить ее работать со всеми описаниями языков?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Вот ваш запрос с добавлением JOIN. Я только что включил один из столбцов описания; вам, конечно, нужно понять, что вам нужно, и так далее.

Примечание: код не проверен.

SELECT
       post_id,
       username,
       post_title,
       description,
       post_tags,
       post_cats,
       MATCH(username) AGAINST (+(:keyword) IN BOOLEAN MODE)  AS  score_username,
       MATCH(post_title) AGAINST (+(:keyword) IN BOOLEAN MODE)  AS  score_title,
       MATCH(description) AGAINST (+(:keyword) IN BOOLEAN MODE) AS score_description,
       MATCH(post_tags) AGAINST (+(:keyword) IN BOOLEAN MODE) AS score_tags,
       MATCH(post_cats) AGAINST (+(:keyword) IN BOOLEAN MODE) AS score_cats,
       t2.description_en

FROM topics
     INNER JOIN topics2 t2 ON (topics.post_id = t2.post_id)

WHERE
MATCH(username) AGAINST (+(:keyword) IN BOOLEAN MODE) OR
MATCH(post_title) AGAINST (+(:keyword) IN BOOLEAN MODE) OR
MATCH(description) AGAINST (+(:keyword) IN BOOLEAN MODE)OR
MATCH(post_tags) AGAINST (+(:keyword) IN BOOLEAN MODE)OR
MATCH(post_cats) AGAINST (+(:keyword) IN BOOLEAN MODE)
ORDER BY is_online DESC,
         (score_username+score_title*0.5+score_description*0.4+score_tags*0.3+score_cats*0.2) DESC

Только одна дополнительная строка в предложении FROM.

Как видите, MATCH es совсем не влияют на JOIN - вам просто нужно указать, как связаны две таблицы.

0 голосов
/ 18 января 2019

Вам нужно использовать JOINS, см. Учебник по соединениям в MYSQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...