3

4 つのテーブルを照会する必要がある検索関数を作成しています。

  • ユーザー
  • 種類
  • サブタイプ
  • 提供されるサービス

usersをクエリするテーブルを検索しtypes、users テーブルのそれぞれにsubtypes基づいservices offeredて検索を実行する必要があります。id

例えば:

users テーブルの行は次のようになります。

| id | type | subtype | services_offered | first_name | last_name | contact | company |
| 1  |  1   |    2    |        47        | Gareth     | Davies    | g@g.com | Gazza   |

タイプ テーブルの行は次のようになります。

| id |   type  |
| 1  | finance |

等々...

ある程度は機能していますが、何らかの理由で連絡先ごとに約 30 行が返されます。これが私のSQLです。

SELECT
    c.type, c.subtype, c.first_name, c.last_name, c.company, c.contact, c.services_provided, c.additional_information, c.date_updated,  t.id, t.type, s.id, s.subtype, so.id, so.services_offered 
FROM 
    contacts c, types t, subtypes s, services_offered so 
WHERE 
    ((c.type LIKE '%$q%' || c.subtype LIKE '%$q%' || c.first_name LIKE '%$q%' || c.last_name LIKE '%$q%' || c.company LIKE '%$q%' || c.services_provided LIKE '%$q%' || c.contact LIKE '%$q%' || c.additional_information LIKE '%$q%' || t.type LIKE '%$q%' || s.subtype LIKE '%$q%' || so.services_offered LIKE '%$q%') 
    AND (c.type = t.id || c.subtype = s.id || c.services_provided = so.id))

理想的には、各連絡先の 1 つだけを返します!

どんな助けでも大歓迎です!

ありがとう、

4

1 に答える 1

0

結果をグループ化する必要があるというのが妥当な推測です。

 GROUP BY c.id 

クエリの最後でおそらくそれを行うでしょう

于 2012-10-31T23:12:26.123 に答える