2012-03-13 81 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已經提供名稱空間。