gpt4 book ai didi

php - 搜索具有不同字段的两个不同的 MySQL 表

转载 作者:行者123 更新时间:2023-11-29 05:30:40 26 4
gpt4 key购买 nike

我在这个主题上找到了帮助:Search different column names in different tables in MySQL但他们只引用该主题中每个表的两个字段,我无法从我的搜索中生成答案。

编辑: 我还发现了这个线程:Combine two tables that have no common fields这提供了更多有用的信息,但我仍然无法弄清楚如何正确组合这些信息

我从来不需要创建 JOINUNION 查询,所以这对我来说都是全新的。如果有一个简单的解决方案,请原谅我。

我需要运行一个查询来搜索两个具有完全不同字段的不同数据库表。

这是我试图合并为一个的两个查询:

"SELECT * FROM seekers 
WHERE (first_name LIKE '%".$q."%')
OR (last_name LIKE '%".$q."%')
OR (username LIKE '%".$q."%')
OR (school LIKE '%".$q."%')
OR (major LIKE '%".$q."%')
OR (employer LIKE '%".$q."%')
OR (position LIKE '%".$q."%')
OR (background LIKE '%".$q."%')
OR (interests LIKE '%".$q."%')
OR (skills LIKE '%".$q."%')
ORDER BY id DESC"

"SELECT * FROM companies
WHERE (company_name LIKE '%".$q."%')
OR (username LIKE '%".$q."%')
OR (industry LIKE '%".$q."%')
OR (slogan LIKE '%".$q."%')
OR (location LIKE '%".$q."%')
ORDER BY id"

查询完后,我想把所有的字段都放到一个数组中,并据此显示数据。

我想我遇到的主要问题是决定我应该如何合并表格?我是想使用 JOIN(内部还是外部)还是使用 UNION

我试图通过这样做来创建一个 VIEW:$this->mysqli->query("CREATE VIEW userTable AS (SELECT * FROM seekers) UNION ALL (SELECT * FROM companies)"); 但这没有用,我猜是因为表格的字段大不相同。

编辑:在尝试了下面的一些答案之后,我想出了这个查询:

SELECT first_name, last_name, username, school, major, employer, position, background, interests, skills 
FROM seekers
WHERE (first_name LIKE '%".$q."%')
OR (last_name LIKE '%".$q."%')
OR (username LIKE '%".$q."%')
OR (school LIKE '%".$q."%')
OR (major LIKE '%".$q."%')
OR (employer LIKE '%".$q."%')
OR (position LIKE '%".$q."%')
OR (background LIKE '%".$q."%')
OR (interests LIKE '%".$q."%')
OR (skills LIKE '%".$q."%')
UNION ALL
SELECT company_name, username, industry, slogan, location, NULL, NULL, NULL, NULL, NULL
WHERE (company_name LIKE '%".$q."%')
OR (username LIKE '%".$q."%')
OR (industry LIKE '%".$q."%')
OR (slogan LIKE '%".$q."%')
OR (location LIKE '%".$q."%')

我删除了 ORDER BY 子句,因为我收到一条错误消息“UNION 和 ORDER BY 的使用不正确”,所以在删除 ORDER BY 之后我收到了这个错误:“查询失败:您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本对应的手册,了解在‘WHERE (company_name LIKE '%0%') OR (username LIKE '%0%) 附近使用的正确语法') OR (industry LIKE '%0%')' 在第 1 行”

为什么 $q 在 union 后的查询中变成了 0?

编辑 #2: 这是我放在一起的一个 JOIN 查询,它实际上返回了数据,但没有返回正确的数据。我不知道这是否有助于回答问题,但我想我还是会把它放在这里。

"SELECT * FROM seekers t1 LEFT JOIN companies t2 ON t1.id = t2.id WHERE (t1.first_name LIKE '%".$q."%') OR (t1.last_name LIKE '%".$q."%') OR (t1.username LIKE '%".$q."%') OR (t1.school LIKE '%".$q."%') OR (t1.major LIKE '%".$q."%') OR (t1.employer LIKE '%".$q."%') OR (t1.position LIKE '%".$q."%') OR (t1.background LIKE '%".$q."%') OR (t1.interests LIKE '%".$q."%') OR (t1.skills LIKE '%".$q."%') OR (t2.company_name LIKE '%".$q."%') OR (t2.username LIKE '%".$q."%') OR (t2.industry LIKE '%".$q."%') OR (t2.slogan LIKE '%".$q."%') OR (t2.location LIKE '%".$q."%')"

对上次查询的格式感到抱歉,粘贴时搞砸了。

最佳答案

您可以尝试使用 UNION,但要为每个列名称指定一个别名。确保它们的顺序相同。请参见下面的示例:

SELECT first_name col1, last_name col2 etc etc FROM seekers 
WHERE (first_name LIKE '%".$q."%')
OR (last_name LIKE '%".$q."%')
OR (username LIKE '%".$q."%')
OR (school LIKE '%".$q."%')
OR (major LIKE '%".$q."%')
OR (employer LIKE '%".$q."%')
OR (position LIKE '%".$q."%')
OR (background LIKE '%".$q."%')
OR (interests LIKE '%".$q."%')
OR (skills LIKE '%".$q."%')
ORDER BY id DESC
UNION
SELECT company_name col1, username col2, etc etc FROM companies
WHERE (company_name LIKE '%".$q."%')
OR (username LIKE '%".$q."%')
OR (industry LIKE '%".$q."%')
OR (slogan LIKE '%".$q."%')
OR (location LIKE '%".$q."%')
ORDER BY id

这将匹配同一结果集中的列。即,first_name 和 company_name 将显示在 col1 中,依此类推。

注意

  1. 对于 UNION,您需要在两个查询中选择相同数量的列。
  2. 你需要匹配数据类型
  3. 如果您需要伪造列,请使用 null

关于php - 搜索具有不同字段的两个不同的 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15168138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com