Php 搜索两个表

Php 搜索两个表,php,mysql,sql,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 ); 如果有人使用关键词“龙珠”,此时,我使用以下查询来搜索我的_

我目前有以下两个表格:

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
);
如果有人使用关键词“龙珠”,此时,我使用以下查询来搜索我的_列表中可能的匹配项:

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%' 
我不知道如何使用一个查询搜索两个表。我想在搜索结果中向用户显示以下数据:名称、同义词、描述和所有标记

我的问题 1.有没有办法缩短当前的mysql查询? 2.如何将其与
文件\u标签
表格组合, -显示
文件列表
中的行,该行在
文件标签
中匹配,但在
文件列表
中不匹配? -要显示
文件列表
中的行,该行在
文件列表中有匹配项,但可能不在
文件标签中


您可以在

处看到当前显示的结果。使用union实际获取每个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');
其他一些问题:
当您说要向用户显示“所有标记”时,您是指给定listid中存在的所有标记吗?或者只是那些匹配的?如果像“%dragon%”这样的描述,那么即使dragon不在文件标记中,它是否也是您希望返回的标记之一?

加入表会更有意义

SELECT name, synonym, description, tag_name 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%' )
OUTER JOIN files_tags on files_tags.listid = files_list.listid
OUTER JOIN
将确保选中所有标记,当每个id有多个标记可用时,这将创建重复行,唯一的区别是标记

查看此问题您的答案:)可能重复