Mysql 使用多个表进行查询

Mysql 使用多个表进行查询,mysql,sql,select,union,Mysql,Sql,Select,Union,此查询根据关键字显示一个包含科目、导师姓名、城市的列表。现在我需要用更多的值修改这个查询。例如,列表中有一个导师姓名,我想显示他/她的当前城市、个人资料图像等。因此,我需要从我的城市表、地址表、导师图像表中获取这些值。。有人能帮我做这个查询吗?试试加入 SELECT keyword FROM ( SELECT tutor_Name AS keyword FROM t UNION SELECT subject_name AS keyword FROM s UNIO

此查询根据关键字显示一个包含科目、导师姓名、城市的列表。现在我需要用更多的值修改这个查询。例如,列表中有一个导师姓名,我想显示他/她的当前城市、个人资料图像等。因此,我需要从我的城市表、地址表、导师图像表中获取这些值。。有人能帮我做这个查询吗?

试试加入

SELECT keyword 
FROM
(
    SELECT tutor_Name AS keyword FROM t
    UNION
    SELECT subject_name AS keyword FROM s
    UNION
    SELECT institute_name AS keyword FROM i
) s
WHERE keyword LIKE '%$queryString%' 
LIMIT 10
尝试加入

SELECT keyword 
FROM
(
    SELECT tutor_Name AS keyword FROM t
    UNION
    SELECT subject_name AS keyword FROM s
    UNION
    SELECT institute_name AS keyword FROM i
) s
WHERE keyword LIKE '%$queryString%' 
LIMIT 10

第一个查询的问题是,获取每个未筛选表的所有结果,将它们合并、区分,然后筛选结果。就查询时间和资源而言,这是非常无效的

这里需要的是连接。 要了解联接是如何工作的,请阅读以下内容

还有这个

让您了解您的查询应该是什么样子的:旧查询已重构

SELECT table1.field, table2.field, table3.field 
FROM table1 
JOIN table2 ON table1columnToMatch = table2columnToMatch
JOIN table3 ON table2columnToMatch = table3columnToMatch
WHERE tableWithKeyword.keyword = $keyword
给我一点时间,从手机切换到pc。。边读边读


对不起,花了点时间。我看到您同时找到了一个解决方案,所以我不想再深入研究这个问题了。您的第一个查询的问题是,您获取每个未筛选表的所有结果,合并它们,区分它们,然后筛选结果。就查询时间和资源而言,这是非常无效的

这里需要的是连接。 要了解联接是如何工作的,请阅读以下内容

还有这个

让您了解您的查询应该是什么样子的:旧查询已重构

SELECT table1.field, table2.field, table3.field 
FROM table1 
JOIN table2 ON table1columnToMatch = table2columnToMatch
JOIN table3 ON table2columnToMatch = table3columnToMatch
WHERE tableWithKeyword.keyword = $keyword
给我一点时间,从手机切换到pc。。边读边读

对不起,花了点时间。我看到您同时找到了一个解决方案,所以我不会再费心钻研这个问题了

试试这个:

SELECT
试试这个:

SELECT

试试这个,它会起作用的:

SELECT keyword, city_name, image_name
FROM (
SELECT tname AS keyword, IFNULL(c1.city_name, '') city_name, IFNULL(ti.image_name, '') image_name FROM t 
LEFT JOIN address a ON t.address_id = a.address_id
LEFT JOIN city c1 ON a.city_id = c1.city_id 
LEFT JOIN tutorImages ti ON t.tutor_id = t1.tutor_id 
UNION
SELECT sname AS keyword, '' city_name, '' image_name FROM sub
UNION
SELECT cname AS keyword, '' city_name, '' image_name FROM c
UNION
SELECT iname AS keyword, '' city_name, '' image_name FROM i ) s
WHERE keyword LIKE '%$queryString%' 
LIMIT 10

试试这个,它会起作用的:

SELECT keyword, city_name, image_name
FROM (
SELECT tname AS keyword, IFNULL(c1.city_name, '') city_name, IFNULL(ti.image_name, '') image_name FROM t 
LEFT JOIN address a ON t.address_id = a.address_id
LEFT JOIN city c1 ON a.city_id = c1.city_id 
LEFT JOIN tutorImages ti ON t.tutor_id = t1.tutor_id 
UNION
SELECT sname AS keyword, '' city_name, '' image_name FROM sub
UNION
SELECT cname AS keyword, '' city_name, '' image_name FROM c
UNION
SELECT iname AS keyword, '' city_name, '' image_name FROM i ) s
WHERE keyword LIKE '%$queryString%' 
LIMIT 10


你试过什么?我们不是来为你工作的;。但是我想你需要JOIN命令。指定你想显示哪些列,并使用JOIN来执行相同的操作。这可能会有帮助,我尝试了使用内部JOIN。但我的问题是我无法处理这个查询。原因是以上查询选择了科目、导师、学院和城市。因此,我只需要为列表中的导师添加导师的城市名称和他/她的个人资料图像。。这就是我面临的问题…你试过什么?我们不是来为你工作的;。但是我想你需要JOIN命令。指定你想显示哪些列,并使用JOIN来执行相同的操作。这可能会有帮助,我尝试了使用内部JOIN。但我的问题是我无法处理这个查询。原因是以上查询选择了科目、导师、学院和城市。因此,我只需要为列表中的导师添加导师的城市名称和他/她的个人资料图像。。这就是我面临的问题…我将您的查询和where子句修改为子查询,如下所示:where ti.image\u type='profile'。它正在工作。但是如果导师没有个人资料图像,这些导师将不会显示在列表中。。你能告诉我为什么吗?ThanksIt不可能,因为我们使用了LEFT JOIN,所以查询将返回所有导师,无论他/她是否有图像。并检查我的更新应答当我使用IFNULL时,我的查询中有错误。。这是“调用本机函数IFNULL时参数计数不正确”。这个信息是什么意思?注意:我使用的是tutorImage表的左连接检查答案。我忘了输入IFNULL函数的第二个参数。我更改了查询。但问题是一样的。如果配置文件图像不需要显示在列表中的导师。我将您的查询和where子句修改为子查询,如下所示,其中ti.image\u type='profile'。它正在工作。但是如果导师没有个人资料图像,这些导师将不会显示在列表中。。你能告诉我为什么吗?ThanksIt不可能,因为我们使用了LEFT JOIN,所以查询将返回所有导师,无论他/她是否有图像。并检查我的更新应答当我使用IFNULL时,我的查询中有错误。。这是“调用本机函数IFNULL时参数计数不正确”。这个信息是什么意思?注意:我使用的是tutorImage表的左连接检查答案。我忘了输入IFNULL函数的第二个参数。我更改了查询。但问题是一样的。如果个人资料图像不必提供给列表中未显示的导师,我可以提供解决方案吗?我可以提供解决方案吗?