首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建超过8个表和特殊条件的多选

如何创建超过8个表和特殊条件的多选
EN

Stack Overflow用户
提问于 2018-12-27 07:47:20
回答 2查看 76关注 0票数 2

我正在尝试创建一个搜索,您可以在其中搜索不同语言的图书和电影名称。我已经尝试使用UNIONUNION ALL,但这不起作用,因为我的主表具有不同数量的列。我还尝试了INNER JOINLEFT JOIN,但也不起作用,因为它重复了一些不应该重复的标题,而我使用的是while循环。

代码语言:javascript
运行
复制
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“

代码语言:javascript
运行
复制
 - 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)
EN

回答 2

Stack Overflow用户

发布于 2018-12-27 11:33:18

我知道JOINUNION很好用。但是,我认为您应该创建一个缓存表,并只在该表上进行搜索。您可以创建一个具有如下结构的表:

代码语言:javascript
运行
复制
search_data
------------------------------
type |id|language|title
------------------------------
book |1 |en      |GoT Fire & Blood
book |1 |jp      |GoT 血と火
movie|3 |en      |The Avengers
movie|3 |jp      |アベンジャーズ

请记住,对于全文搜索,应该为title列编制索引。现在,您可以在search_datatitle列上进行搜索,并根据typeidlanguage列从原始表(booksmovies)中检索商品详细信息。search_data表应该通过PHP脚本、cron作业或MySQL触发器在每次表更新时进行更新。

票数 3
EN

Stack Overflow用户

发布于 2018-12-27 11:34:36

您只需要选择具有一致命名的正确数量的列,那么UNION ALL应该不会有任何问题。下面是一个小示例:

代码语言:javascript
运行
复制
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,请注意unicode字符需要在您的代码中进行转义,这可能会变得复杂,您可能需要摆弄编码。如果您使用的是SQL Server / TSQL,则可以在字符串中使用N前缀来表示NVARCHAR。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53938294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档