2012-11-27 122 views
1
SELECT keyword 
FROM 
(
    SELECT tutor_Name AS keyword FROM t 
    UNION 
    SELECT subject_name AS keyword FROM s 
    UNION 
    SELECT institute_name AS keyword FROM i 
) s 
WHERE keyword LIKE '%$queryString%' 
LIMIT 10 

此查詢根據關鍵字顯示帶有主題,導師名稱和城市的列表。現在我需要用更多的值修改這個查詢。例如,列表中有一個導師姓名,我想顯示他/她的當前城市,他/她的個人資料圖片等。所以我需要從我的城市表,地址表,tutorImages表中獲取這些值。所以任何人都可以幫我做這個查詢?使用多個表格進行查詢

+1

你嘗試過什麼?我們不在這裏做你的工作;)。但我想你想要'JOIN'命令。 – looper

+0

指定要顯示的列和使用JOIN執行相同的操作 –

+0

閱讀本文可能會有助於http://www.w3schools.com/sql/sql_join.asp – xurca

回答

2

試試這個它會工作:

$q = "SELECT keyword, col, city_name, image_name, tutor_code 
      FROM (
       SELECT tutor_name AS keyword, 'Tutors' AS col, IFNULL(c1.city_name, '') city_name, IFNULL(ti.image_name, '') image_name, tutor_code FROM tutors AS t 
       LEFT JOIN address a ON t.address_id = a.address_id 
       LEFT JOIN city c1 ON a.city_id = c1.city_id 
       LEFT JOIN tutor_images ti ON t.tutor_id = ti.tutor_id and ti.image_type = 'profile' 
       UNION 
       SELECT subjects AS keyword, 'Subject' AS col, '' city_name, '' image_name, '' tutor_code FROM subject 
       UNION 
       SELECT city_name AS keyword, 'City' AS col, '' city_name, '' image_name, '' tutor_code FROM city 
       UNION 
       SELECT institute_name AS keyword, 'Institute' AS col, '' city_name, '' image_name, '' tutor_code FROM institutes 
      ) s 
      WHERE keyword LIKE '%$queryString%' 
      LIMIT 10"; 
+0

是的..它爲我工作..非常感謝你的幫助.. – ugnuku

0

嘗試加入。

SELECT table1.field, table2.field, table3.field 
FROM table1 
JOIN table2 ON table1columnToMatch = table2columnToMatch 
JOIN table3 ON table2columnToMatch = table3columnToMatch 
WHERE tableWithKeyword.keyword = $keyword 
1

與第一個查詢的問題是,你取每個表未經過濾的,他們的工會,他們分明,然後過濾結果的所有結果。這在查詢時間和資源方面相當無效。

這裏您需要的是JOIN。 要了解如何加入工作,閱讀本

http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

http://dev.mysql.com/doc/refman/5.5/en/join.html

爲了讓您的查詢應該如何看起來像一個想法:舊的重構

SELECT 

給我一點,從手機切換到電腦..閱讀文章while;)

對不起,花了點時間。我看你已經找到了解決方案。同時,所以我不會打擾挖掘到這不再

+0

我可以爲此提供解決方案嗎? – TNK

1

試試這個:

SELECT keyword, city_name, image_name 
FROM (
SELECT tname AS keyword, IFNULL(c1.city_name, '') city_name, IFNULL(ti.image_name, '') image_name FROM t 
LEFT JOIN address a ON t.address_id = a.address_id 
LEFT JOIN city c1 ON a.city_id = c1.city_id 
LEFT JOIN tutorImages ti ON t.tutor_id = t1.tutor_id 
UNION 
SELECT sname AS keyword, '' city_name, '' image_name FROM sub 
UNION 
SELECT cname AS keyword, '' city_name, '' image_name FROM c 
UNION 
SELECT iname AS keyword, '' city_name, '' image_name FROM i) s 
WHERE keyword LIKE '%$queryString%' 
LIMIT 10 
+0

我修改你的查詢和where子句到這樣的子查詢WHERE ti.image_type ='profile'。這是工作。但如果導師沒有個人資料圖像,這些導師不會顯示在列表中..你能告訴我爲什麼嗎?謝謝 – ugnuku

+0

這是不可能的,因爲我們使用了LEFT JOIN,所以無論他/她有沒有圖像,查詢都會返回所有的導師。並檢查我的更新答案 –

+0

否我使用INNER JOIN與查詢..它的工作。 – ugnuku