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テーブルからこれらの値を取得する必要があります。このクエリを作成するのを手伝ってくれませんか?

4

4 に答える 4

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";
于 2012-11-27T13:33:40.167 に答える
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

モバイルからPCに切り替えて、ちょっと待ってください。記事を読んでください;)

申し訳ありませんが、もう少し時間がかかりました。その間に解決策を見つけたと思いますので、これ以上掘り下げることはしません

于 2012-11-27T07:36:35.473 に答える
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
于 2012-11-27T07:36:44.037 に答える
0

参加してみてください。

SELECT table1.field, table2.field, table3.field 
FROM table1 
JOIN table2 ON table1columnToMatch = table2columnToMatch
JOIN table3 ON table2columnToMatch = table3columnToMatch
WHERE tableWithKeyword.keyword = $keyword
于 2012-11-27T07:30:17.403 に答える