[英]search two different MySQL tables with different fields
我在這個主題上找到了幫助: 在MySQL中的不同表中搜索不同的列名,但是它們只引用該主題中每個表的兩個字段,而我無法從我的搜索中生成答案。
編輯:我也找到了這個線程: 結合兩個沒有公共字段的表,提供更多有用的信息,但我仍然無法弄清楚如何正確組合這些
我從來沒有需要創建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和ORDER 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."%')"
對不起上次查詢的格式化,粘貼時搞砸了。
您可以嘗試使用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中,依此類推。
注意
當您使用UNION時,您需要確保每個SELECT中的字段數相等。 所以在上面的例子中你不應該使用'Select *' - 做這樣的事情:
選擇t1.field1,t1.field2,t1.field3,t1.field4,t1.field5,t1.field6
來自......
哪里.....
聯盟
選擇t2.field1,t2.field2,t2.field3,t2.field4,'',''
來自......
哪里.....
如果每個Select中的字段數量不同,請添加一些空白字段以使其均勻。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.