我看起來像是一組工作的SQL語句,它們在一個下拉式場景下運行。第一個是全包式AND,每個請求的選項都匹配。如果失敗了,它將轉到基於OR的第二個SQL調用。我怎樣才能使這種SQL排序最相關?
有人可以向我解釋或提供更好的語句,其中第二層OR場景是最相關的第一個排序,這意味着大多數選項匹配作爲第一個條目,並從那裏向下?
或者,或者,如果您有更好的方法來處理此搜索,可能只需一次調用,那樣會更好。
第一個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:我現在明白了,謝謝。太多時間了。 –