2012-03-13 85 views
0

我目前正在学习mysql,所以我对此很陌生,试图在其他地方找到解决方案,但无法解决。在一个查询中的2个表中搜索MYSQL

我有2个表,import_staff和import_student。

  • 的import_staff表有3列,ID,stafffirstname和stafflastname
  • 的import_student也有3列,ID,studentfirstname和studentlastname

我有一个形式允许用户按姓名搜索职员用户或学生用户。

我可以让我的查询通过一个表像这样来搜索:

SELECT * FROM import_staff WHERE CONCAT(stafffirstname,space(1),stafflastname) LIKE '%$queryString%' LIMIT 10 

BUT..I希望查询通过两个表中搜索..不知道如何甚至开始。任何想法都表示赞赏。谢谢。

顺便说一句,使用PHP。

回答

1

您可以用UNION做到这一点:

SELECT id, stafffirstname AS name1, stafflastname AS name2 FROM import_staff WHERE CONCAT(stafffirstname,space(1),stafflastname) LIKE '%$queryString%' LIMIT 10 
UNION ALL 
SELECT id, studentfirstname AS name1, studentlastname AS name2 FROM import_student WHERE CONCAT(studentfirstname,space(1),studentlastname) LIKE '%$queryString%' LIMIT 10 
0

你也可以做到这一点与加盟

SELECT * 
FROM import_staff 
INNER JOIN import_student 
ON 1 = 1 
0
SELECT t1.stafffirstname, t1.stafflastname, t2.studentfirstname, t2.studentlastname, 
FROM import_staff t1, import_student t2 
WHERE CONCAT(t1.stafffirstname,space(1),t2.stafflastname) LIKE '%$queryString%' LIMIT 10 

这可能会为你工作。

0
select * from (
    select id, stafffirstname as firstname, stafflastname as lastname from import_staff 
    union 
    select id, studentfirstname as firstname, studentlastname as lastname from import_student) t 
where concat_ws(' ',firstname,lastname) like '%term%' 

在你的表定义中,而不是studentlastname之类的,你应该只使用lastname。表名import_staff和import_student已经提供名称空间。