Mysql 如何创建包含8个以上表格和特殊条件的multi-select

Mysql 如何创建包含8个以上表格和特殊条件的multi-select,mysql,sql,Mysql,Sql,我试图创建一个搜索引擎,你可以用不同的语言搜索书籍和电影的名字。 我已经尝试过使用UNION和UNION-ALL,但这不起作用,因为我的主表的列数不同。我还尝试了内部连接和左连接,但也不起作用,因为它重复了一些不应该重复的标题,而我正在使用while循环 movie --------------------------------------------------------- movie_id|original_movie_title|serial_id|genre|type|aired|

我试图创建一个搜索引擎,你可以用不同的语言搜索书籍和电影的名字。 我已经尝试过使用
UNION
UNION-ALL
,但这不起作用,因为我的主表的列数不同。我还尝试了
内部连接
左连接
,但也不起作用,因为它重复了一些不应该重复的标题,而我正在使用while循环

movie
---------------------------------------------------------
movie_id|original_movie_title|serial_id|genre|type|aired|
---------------------------------------------------------
   1    |Harry Potter        |    1    | ... |... | ... |
   2    |Kimi No Na Wa       |    2    | ... |... | ... |
   3    |Avengers            |    3    | ... |... | ... |

book
--------------------------------------------------
book_id|original_book_title|serial_id|genre|aired|
--------------------------------------------------
   1   |GoT Fire & Blood   |    4    | ... | ... |
   2   |Kimi No Na Wa      |    2    | ... | ... |
   3   |The Jungle Book    |    5    | ... | ... |

movie_de                             movie_ru
------------------------------       ------------------------------
de_movie_id|movie_id|de_title|       ru_movie_id|movie_id|ru_title|
   1       |    1   |Harry Potter       1       |    1   |гарри поттер
   2       |    2   |Your Name          2       |    2   |Твоё имя

movie_jp                               movie_en
------------------------------         ------------------------------
jp_movie_id|movie_id|jp_title|         en_movie_id|movie_id|en_title|
   1       |    1   |ハリー・ポッターと    1        |    1   |Harry Potter    
   2       |    3   |アベンジャーズ        2       |    2    |Your Name.
   3       |    2   |君の名は。           3        |    3   |The Avengers

book_de                              book_ru
------------------------------       ------------------------------
de_book_id|book_id|de_title|         ru_book_id|book_id|ru_title|
   1      |    1  |GoT Feuer & Blut   1        |    1  |GoT огонь и кровь    
   2      |    2  |Your Name.         2        |    2  |Твоё имя
   3      |    3  |Das Dschungel B.                  

book_jp                              book_en
------------------------------       ------------------------------
jp_book_id|book_id|jp_title|         en_book_id|book_id|en_title|
   1      |  2   |君の名は。            1       |   1   |GoT Fire & Blood    
   2      |  1   |GoT 血と火            2       |   2   |Your Name.
                                       3       |   3   |The Jungle Book 
现在,如果我在搜索中输入字母“o”,我希望所有语言标题都按名称列出并排序,但所有语言标题都应该具有主表中相同的“基本信息”。所以如果我搜索“の" 这封信的所有标题都应该列出来,并紧靠在它们旁边,应该注明流派和播出日期,如:

搜索“o”


我知道
JOIN
UNION
是有效的。但是,我认为您应该创建一个缓存表,并只在该表上搜索。您可以创建一个具有如下结构的表:

search_data
------------------------------
type |id|language|title
------------------------------
book |1 |en      |GoT Fire & Blood
book |1 |jp      |GoT 血と火
movie|3 |en      |The Avengers
movie|3 |jp      |アベンジャーズ

请记住,应为
标题
列编制全文搜索索引。现在,您可以搜索
搜索数据
标题
列,并从原始表(
书籍
电影
)中检索项目详细信息基于
类型
id
语言
列。
搜索数据
表应通过PHP脚本更新,每次更新表时,cron作业或MySQL都会触发。

您只需选择正确数量的列并使用一致的命名,然后
UNION ALL
应不使用任何问题。下面是一个小样本:

SELECT
    original_movie_title as title,
    genre, aired
FROM movie
WHERE original_movie_title LIKE '%o%'
UNION ALL
SELECT 
    title.de_title as title, 
    movie.genre, movie.aired
FROM movie_de as title
LEFT JOIN movie
ON title.movie_id = movie.movie_id
WHERE title.de_title LIKE '%o%'

由于您标记了MySQL,请注意需要在LIKE中转义unicode字符,这可能会变得复杂,您可能需要修改编码。如果您使用的是SQL Server/TSQL,您可以在字符串中使用
N
前缀来表示NVARCHAR。

听起来您使用UNION/UNION的方法是正确的所有的想法…为了避免使用不同数量的列,只需为其他表中的每一列选择null或空文字字符串,以填充列数较少的列。为什么不向我们展示您所尝试的方法呢?与我的响应相比,这是一种更好的方法。只是想注意,如果需要,您需要重新编码为UTF-8序列您将在标题栏上使用
LIKE
搜索,如果您的英语/德语标题页设置为
VARCHAR
,则应将其转换为
NVARCHAR
SELECT
    original_movie_title as title,
    genre, aired
FROM movie
WHERE original_movie_title LIKE '%o%'
UNION ALL
SELECT 
    title.de_title as title, 
    movie.genre, movie.aired
FROM movie_de as title
LEFT JOIN movie
ON title.movie_id = movie.movie_id
WHERE title.de_title LIKE '%o%'