2010-11-18 13 views
0
SELECT DISTINCT business.name AS businessname 
     ,business.description AS description 
FROM business 
     , category 
     , sub_categories 
WHERE business.cityID = '$city' 
     AND (category.name LIKE '%$name%' 
      OR sub_categories.name LIKE '%$name%') 
     AND business.status = 0 

Pls上記のSQLコードは、ブラケット内の2つのテーブルのセットを検索して結果を返すと仮定していますが、何らかの理由でそうしていません。何が間違っているのですか?クエリで複数のテーブルを検索する

ありがとうございます。

+1

代わりに何をしていますか?エラーはありますか?異なる結果は? – deceze

+0

@decezeデフォルトでは5つの結果が返されます。 distinctキーワードがなければ、都市と一致するすべてのレコードと、都市とその特定のカテゴリまたはサブカテゴリに対応する返品とを返します。 @ハム・エヴィギ、そうするでしょう。ありがとう – Cyberomin

+0

都市IDはおそらく数字です。もしそうでなければ '$ city'を引用符で囲んではいけません。 –

答えて

2

クエリの結果はcartesian productとなります。あなたのテーブルのサイズに応じてかなりの時間がかかります。

説明に基づいて、サブクエリを使用して一致するカテゴリを確認します。この方法では、各ビジネスを1回だけ返すようにクエリでdistinctを使用する必要はありません。まともなSQLチュートリアルから始めることをお勧めします。

SELECT name AS businessname 
     ,description AS description 
FROM business 
WHERE cityID = '$city' 
AND  status = 0 
AND ( categoryID in (select id from category where name like '%$name%') 
    or subcategoryID in (select id from sub_categories where name like '%$name%') 
) 
+0

@Martin、ビジネステーブルにカテゴリIDとサブカテゴリIDがあります。ビジネステーブルのキークエリの目的は、入力された都市IDとカテゴリまたはサブカテゴリに基づいてビジネス名とその説明を取得することです。 – Cyberomin

+0

@Martin、私のコードを書き直せますか?ありがとうございました。 BUSINESSNAME AS – Cyberomin

+0

SELECT business.name、= 1 business.cityIDと 'status' = 0 AND(business.catIDは'のようなNAME'」カテゴリからIDを選択(のビジネス FROM説明 AS \t business.description %hotel% ') またはbusiness.subCatID(sub_categoriesのIDを'%$ Hotels% 'のような 'name')から選択してください) )、結果は返されません。 – Cyberomin

0

2つのことが頭に浮かぶ:

  1. あなたが一緒に3つのテーブルのいずれかに参加していません。 LEFT JOIN節をいくつか追加することを検討してください。
  2. 1つのテーブルから列を選択しています。他の表の列を使用する場合は、SELECT句に列を追加する必要があります。
+0

あなたの応答に感謝、pls私のための正しい方法でSQLをフォーマットすることができます。ありがとう。 – Cyberomin

+0

「フォーマット」とはどういう意味ですか? – cdhowie

+0

さて、コードがコードである正しい方法は、JOINとすべてで書かれていると考えられます。ここにその関係があります。ビジネステーブルにはカテゴリIDとサブカテゴリIDがあります。つまり、ビジネステーブルのすべての外部キーです。クエリの目的は、都市名と入力されたカテゴリまたはサブカテゴリに基づいてビジネス名とその説明を取得することです。 – Cyberomin

関連する問題