2012-06-18 43 views
0

我有以下問題:一個搜索項,對於兩個不同的表

我有一個搜索框,讓用戶可以搜索無論是對一個帖子,用戶名或電子郵件。

帖子在我的帖子表中,用戶位於我的用戶表中。表具有以下結構:

帖子

POST_ID USER_ID 後 POST_DATE 可見

用戶

用戶ID 用戶名 電子郵件 姓名 姓氏

我可以用一個查詢從兩個表中獲得結果?不知道這對我有什麼好處(如果有的話),只是問。

然後,我應該在同一頁面上顯示結果,但首先發布帖子,然後發佈用戶。如您所見,帖子將顯示不同的數據,用戶將顯示不同的數據。

我知道該組由clausule存在,所以我想分組結果,首先要獲得帖子,然後是用戶。

任何幫助建設這個查詢將深表感謝。

問候,Zoreli

+0

此外,是否有可能統計有多少結果來自帖子表和有多少來自用戶表? – Zoran

回答

0

如果表都是相同的架構,你可以

SELECT fields from posts where (yadda = 1) 
UNION 
SELECT fields from users where (yadda = 1) 

然而,這個心不是可能的,因爲你的表有不同的模式和數據類型 (即POST_DATE大概日期時間,而用戶表中的對應字段是firstname,這是一個字符串)

你可以在理論上解決這個問題,通過只爲條件填充虛擬字段,或者爲你sers ...

SELECT 'P' as result_type, post_id, user_id, post_date, visible, NULL as username, NULL as email, NULL as firstname, NULL as lastname from posts where (yadda = 1) 
UNION ALL 
SELECT 'U', NULL, userid, NULL, NULL, username, email, firstname, lastname from users where (yadda = 1) 

但這是一個相當糟糕的做事方式。您正在傳輸更多數據,然後必須編寫邏輯來檢查它是哪一行,然後詢問相關字段。

所以簡單的答案是隻發出兩個單獨的查詢。

我推薦以上的唯一時間是如果你有一些複雜的基於數據庫的排序順序,這意味着你必須合併帖子記錄和用戶記錄。從你的問題來看,這聽起來不太可能。

0

像這樣的東西可以工作,但它不是一個非常優雅的解決方案。

SELECT q.post_id, q.post_user_id, q.post, q.post_date, q.post_visible, 
     q.user_id, q.username, q.user_email, q.user_first, q.user_last 
FROM (
     SELECT post_id, user_id AS post_user_id, post, post_date, visible AS post_visible, 
       0 AS user_id, "" AS username, "" AS user_email, "" AS user_first, "" AS user_last 
     FROM posts 
     WHERE post like ? 
    UNION 
     SELECT 0 AS post_id, "" AS post_user_id, "" AS post, "" AS post_date, 0 AS post_visible, 
       userid AS user_id, username, email AS user_email, firstname AS user_first, lastname AS user_last 
     FROM users 
     WHERE username like ? 
     OR  email like ? 
     ) q 
ORDER BY q.post_id DESC 
相關問題