簡體   English   中英

搜索具有不同字段的兩個不同的MySQL表

[英]search two different MySQL tables with different fields

我在這個主題上找到了幫助: 在MySQL中的不同表中搜索不同的列名,但是它們只引用該主題中每個表的兩個字段,而我無法從我的搜索中生成答案。

編輯:我也找到了這個線程: 結合兩個沒有公共字段的表,提供更多有用的信息,但我仍然無法弄清楚如何正確組合這些

我從來沒有需要創建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(用戶名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中,依此類推。

注意

  1. 使用UNION,您需要在兩個查詢中選擇相同數量的列。
  2. 您需要匹配數據類型
  3. 如果你需要偽造一個列使用null

當您使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM