搜索两个表

use*_*670 6 php mysql sql

我目前有两个表:

CREATE TABLE files_list
(
    'listid' INT, 
    'name' VARCHAR(25), 
    'synonym' VARCHAR(25), 
    'description' VARCHAR(25)
);

CREATE TABLE files_tags
(
    'tag_name' VARCHAR(25), 
    'listid' INT
);
Run Code Online (Sandbox Code Playgroud)

如果有人使用关键字"龙球",目前,我使用以下查询来搜索my_list以查找可能的匹配项:

SELECT * 
FROM files_list
WHERE name LIKE '%dragon%' 
OR synonym LIKE '%dragon%' 
OR description LIKE '%dragon%' 
OR name LIKE '%ball%' 
OR synonym LIKE '%ball%' 
OR description LIKE '%ball%' 
Run Code Online (Sandbox Code Playgroud)

我不知道如何使用一个查询搜索两个表.我想向用户显示搜索结果中的以下数据:名称,同义词,描述和所有标签.

我的问题 1.有没有办法让当前的mysql查询更短?2.如何将其与files_tags表格结合使用,以显示files_list哪些行匹配files_tags但不在files_list?- 显示files_tags`中files_list匹配的files_list, but may not in行?

您可以在http://hsbsitez.com/上查看当前显示的结果

yst*_*sth 0

使用 union 实际获取每个联合查询所需的列时要小心。在这种情况下,子查询似乎更有意义:

SELECT name, synonym, description FROM files_list WHERE
       name LIKE '%dragon%' OR synonym LIKE '%dragon%' OR description LIKE '%dragon%'
       OR name LIKE '%ball%' OR synonym LIKE '%ball%' OR description LIKE '%ball%'
       OR listid IN (SELECT listid FROM files_tags WHERE tag_name='dragon' OR tag_name='ball');
Run Code Online (Sandbox Code Playgroud)

一些其他问题:当您说要向用户显示“所有标签”时,您是指给定 listid 存在的所有标签吗?或者只是那些匹配的?如果像“%dragon%”这样的描述,dragon 是您想要返回的标签之一,即使它不在 file_tags 中?