0

参加したいクエリが 2 つありますが、これまで実際に行ったことはありません。うまくいけば、あなたの明るい火花が助けてくれるでしょう。

販売中の企業を表示しています。最初のクエリは問題ありません。

SELECT DISTINCT * FROM businesses WHERE business_asking_price > 1 AND business_location = 11 ORDER BY business_id DESC

上記は、ロンドンのすべてのビジネスを検索するだけでなく、特定の価格内のすべてのビジネスを検索します。

ここまでは順調ですね。

しかし、私が抱えている頭痛の種は、ビジネスのタイプです。1 つのビジネス (美容院としましょう) は、複数のタイプのビジネス タイプ カテゴリを持つことができます。この場合は、ヘルス/ビューティーとヘアサロンです。

したがって、カテゴリは bus_parents という別のテーブルにあります。

bus_parent_id  |   bus_parent_parent | bus_parent_child

176            |          56         |         42
177            |          56         |         43
181            |          56         |         46
202            |          56         |         57

bus_parent_id は明らかに一意の ID です

bus_parent_parent は業種 ID です

bus_parent_child はビジネス ID です

したがって、2 つのクエリを一緒にラップして、最初のクエリですべてのビジネスを検索し、それらをさらに絞り込んで、bus_parent_parent 内のビジネスのみを表示したいと考えています。

うまくいけば、私は自分が何をしようとしているのかを明確にしました。

私が求めているのはJOINですか、それとも何か他のものですか?

4

4 に答える 4

0

以下のSQLをJOINで試してください。

SELECT DISTINCT businesses.* 
FROM businesses 
INNER JOIN bus_parents ON businesses.business_id = bus_parents.bus_parent_child 
WHERE businesses.business_asking_price > 1 
AND businesses.business_location = 11 
AND bus_parents.bus_parent_parent = 56 
ORDER BY businesses.business_id DESC

タイプID=56のすべてのビジネスを取得します。必要に応じて、このパラメーターを変更できます。

bus_parentsの各フィールドの説明に基づいてJOIN、目的の結果を取得するために使用しました。(業種IDを絞り込みます)

于 2013-02-20T12:34:24.400 に答える
0

私があなたを正しく理解しているなら、私はあなたがこのようなものが欲しいと思います:

SELECT DISTINCT * FROM businesses 
LEFT JOIN business_type ON business_type.bus_parent_child = business.id 
WHERE business_asking_price > 1 AND business_location = 11 
AND business_type.bus_parent_parent = <Your desired parent> 
ORDER BY business_id DESC

これは、business_typeにビジネスを参加させていますbusiness_type.bus_parent_child = business.id

追加のWHERE句を使用してtype.bus_parent_parent

于 2013-02-20T12:36:03.743 に答える
0
SELECT DISTINCT businesses.* 
FROM businesses a
INNER JOIN bus_parents b ON a.business_id = b.bus_parent_parent 
WHERE a.business_asking_price > 1 
AND a.business_location = 11 
ORDER BY a.business_id DESC
于 2013-02-20T12:39:20.500 に答える
0
SELECT * FROM businesses b WHERE business_asking_price > 1 AND business_location = 11 

and (select bus_parent_id from bus_parents where bus_parent_child=b.bussiness_id and bus_parent_parent=in(56,57,58) limit 1) != NULL

ORDER BY business_id DESC

ここでは、bussiness_id がビジネス テーブルの主キー列であると仮定します。

大きなテーブルでは非常に負担がかかる(遅い)可能性があるため、大きなクエリでのdistinctの使用は避ける必要があります。特に多くの列をリクエストする場合。

于 2013-02-20T12:43:16.093 に答える