我在这个主题找到帮助:Search different column names in different tables in MySQL但他们只引用该主题中的每个表的两个字段,我无法从我的搜索生成一个答案。搜索两个不同的MySQL表与不同的字段
编辑:我还发现这个线程:Combine two tables that have no common fields这给多一点有用的信息,但我仍然无法弄清楚如何组合这些正确
我从未有过需要建立一个JOIN
或UNION
查询,所以这对我来说都很新。所以请原谅我,如果有一个简单的解决方案。
我需要运行一个查询,该查询将搜索具有完全不同字段的两个不同数据库表。
这里有两个查询我试图合并为一个:
"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和秩序BY“,所以在删除ORDER BY
后,我得到这样的错误:”查询失败:你的SQL语法有错误;查看与你的MySQL服务器版本相对应的手册,查找'WHERE(company_name LIKE'%' 0%')OR(用户名LIKE'%0%')或(行业LIKE'%0%')'在线1“
为什么$q
在联合后的查询中变为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."%')"
对于最后一个查询的格式化感到抱歉,所以在粘贴时弄错了它。
也许这将帮助:http://stackoverflow.com/questions/7407864/mysql-select-union- for-different-columns – 2013-03-01 23:13:46