如何搜索不在同一表中的列?

时间:2019-01-18 17:40:28

标签: mysql sql

这个惊人的查询效果很好,我很高兴:

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

但是现在“描述”在另一个表名称“ topics2”中,具有相同的“ post_id”和每种语言的一列: “ description_en”,“ description_fr”,“ description_it”。

如何用相同的查询选择另一个表,然后使其与所有语言描述一起使用?

2 个答案:

答案 0 :(得分:0)

您需要使用JOINS参见Tutorial on joins in MYSQL

答案 1 :(得分:0)

这是添加了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根本不影响JOIN-您只需要指定两个表之间的关系即可。