我试着创建一个搜索,你可以搜索不同语言的书和电影的名字。我已经试过使用 UNION
以及 UNION ALL
但这不起作用,因为我的主表的列数不同。我也试过了 INNER JOIN
以及 LEFT JOIN
但这也不起作用,因为它重复了一些不应该重复的标题,而我正在使用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”
- Harry Potter |Genre:... |Aired:... (From movie_de)
- Kimi No Na Wa |Genre:... |Aired:... (From original_movie_title)
- Your Name |Genre:... |Aired:... (From book_en)
- гарри поттер |Genre:... |Aired:... (From movie_ru)
- Your Name |Genre:... |Aired:... (From movie_en)
- The Jungle Book |Genre:... |Aired:... (From original_book_title)
- Harry Potter |Genre:... |Aired:... (From movie_en)
- Got Fire & Blood |Genre:... |Aired:... (From book_en)
- Got Feuer & Blut |Genre:... |Aired:... (From book_de)
2条答案
按热度按时间vaj7vani1#
我知道
JOIN
以及UNION
工作。但是,我认为应该创建一个缓存表,然后只在该表上搜索。可以使用以下结构创建表:记住
title
列应为全文搜索编制索引。现在,你可以在title
列search_data
并从原始表中检索项目详细信息(books
或者movies
)基于type
,id
以及language
柱。这个search_data
每次更新表时,应该通过php脚本、cron作业或mysql触发器更新表。f3temu5u2#
您只需要选择正确数量的具有一致命名的列,然后
UNION ALL
应该没问题。下面是一个小示例:既然您为mysql添加了标签,请注意unicode字符需要在like中转义,这可能会变得复杂,您可能需要在编码方面做些手脚。如果您使用的是sql server/tsql,那么可以使用
N
字符串的前缀表示nvarchar。