0

特定の半径から結果を返す検索を試みています。最初のステップは機能していますが、2 番目のテーブルを含めて結果を拡張しようとすると、機能しなくなります。UNION が進むべき道だとは思いませんが、私がやろうとしていることをよりよく説明するためにそれを考えてみましょう:

SELECT *, 3956 * 2 * ASIN(SQRT( POWER(SIN((48.4284207 -abs(dest.lat)) * pi()/180 / 2),2) + COS(48.4284207 * pi()/180 ) * COS( abs(dest.lat) * pi()/180) * POWER(SIN((-123.3656444 - dest.lng) * pi()/180 / 2), 2) )) 
      as distance 
FROM business dest having distance < 10500 and 
     (businessName LIKE '%web%') ORDER BY distance
UNION 
(
 SELECT b.* 
   FROM business b, keywords k 
  WHERE k.keyword 
   LIKE '%web%' and b.businessID=k.businessID
) 

2 番目のテーブルには、「キーワード」と最初のテーブルの businessID への fk の 2 つの列がありました。

4

1 に答える 1

1

あなたのコメントのクエリから、ビジネス名またはリンクされたキーワード テーブルの関連キーワードに「web」が含まれる、ある程度離れた場所にあるビジネスを見つけたいと思われます。

その場合、次のようなクエリを実行する必要があります。

SELECT DISTINCT dest.*, 3956 * 2 * ASIN(SQRT( POWER(SIN((48.4284207 -abs(dest.lat)) * pi()/180 / 2),2) + COS(48.4284207 * pi()/180 ) * COS( abs(dest.lat) * pi()/180) * POWER(SIN((-123.3656444 - dest.lng) * pi()/180 / 2), 2) )) 
      AS distance 
FROM business dest
LEFT JOIN keywords k
ON k.businessID = dest.businessID
WHERE dest.businessName LIKE '%web%' OR k.keyword LIKE '%web%'
HAVING distance < 10500 
ORDER BY distance
于 2013-03-02T22:11:55.110 に答える