私はドロップダウンシナリオで動作するSQL文の作業セットのように見えます。最初のものはすべてを含むANDで、要求されたオプションはすべて一致します。それに失敗すると、ORに基づいた2番目のsql呼び出しに行きます。どのように私はこのSQLソートを最も関連性の高いものにすることができますか?
第2層のORシナリオが最も関連性の高い順にソートされている場合、誰かが説明してください。つまり、ほとんどのオプションが最初のエントリとして一致し、そこから下に行くということですか?
または、この検索を処理する方が良い場合は、1回の呼び出しで可能ですが、これはさらに優れています。
最初のSQLに基づいてコールAND:
SELECT
l.id,l.title,l.city
FROM listings l
JOIN listings_facilities_xref x ON l.id = x.listing_id
WHERE l.property_type = '1'
AND x.facility_id = '1'
AND x.facility_id = '8'
AND x.facility_id = '54'
AND x.facility_id = '11'
AND l.city = 'Orlando'
AND l.state = '16'
GROUP BY l.id
第二階層に基づいてコールOR:
SELECT l.id,l.title,l.city
FROM listings l
JOIN listings_facilities_xref x ON l.id = x.listing_id
WHERE l.property_type = '1'
AND (
x.facility_id = '1'
OR x.facility_id = '8'
OR x.facility_id = '54'
OR x.facility_id = '11'
)
AND l.city = 'Orlando'
AND l.state = '16'
GROUP BY l.id
次のように私のテーブルレイアウトは次のとおりです。
mysql> describe listings;
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| id | int(12) | NO | PRI | NULL | auto_increment |
| owner_id | int(12) | NO | | NULL | |
| property_type | int(12) | NO | | NULL | |
| title | varchar(100) | NO | | NULL | |
| description | text | NO | | NULL | |
| yearbuilt | int(12) | NO | | NULL | |
| beds | int(11) | NO | | NULL | |
| baths | int(11) | NO | | NULL | |
| sleeps | int(11) | NO | | NULL | |
| sqfeet | int(12) | NO | | NULL | |
| lotsize | int(12) | NO | | NULL | |
| address1 | varchar(255) | NO | | NULL | |
| address2 | varchar(255) | NO | | NULL | |
| city | varchar(100) | NO | | NULL | |
| state | int(12) | NO | | NULL | |
| zipcode | varchar(50) | NO | | NULL | |
| latitude | varchar(50) | NO | | NULL | |
| longitude | varchar(50) | NO | | NULL | |
| created | int(12) | NO | | NULL | |
| updated | int(12) | NO | | NULL | |
+---------------+--------------+------+-----+---------+----------------+
mysql> describe listings_facilities_xref;
+-------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------+------+-----+---------+----------------+
| id | int(12) | NO | PRI | NULL | auto_increment |
| listing_id | int(12) | NO | | NULL | |
| facility_id | int(12) | NO | | NULL | |
| category_id | int(12) | NO | | NULL | |
+-------------+---------+------+-----+---------+----------------+
サンプルのインポートデータは
にあります。リスト:https://pastebin.com/EeuaEFrR
listings_facilities_xref:https://pastebin.com/7WeHgEaE
があなたのバージョン。 –
最初のクエリは常に失敗します。 facility_idが1と11と5になるような行はありません。 – Valli
Gordon、Valli:今はおかげです。時間が長すぎます。 –