Mysql 如何使此SQL按最相关项排序?
我有一个SQL语句的工作集,它在下拉场景中运行。第一个是一个包罗万象的系统,其中每个请求的选项都是匹配的。否则,它将转到基于OR的第二个sql调用 有人能给我解释一下,或者提供更好的陈述,第二层或场景是按照最相关的第一个排序的,这意味着大多数选项匹配为第一个条目,并从那里向下排列吗 或者,如果你有更好的方法来处理这个搜索,可能只需要一个调用,那就更好了 基于和的第一个SQL调用:Mysql 如何使此SQL按最相关项排序?,mysql,sql,Mysql,Sql,我有一个SQL语句的工作集,它在下拉场景中运行。第一个是一个包罗万象的系统,其中每个请求的选项都是匹配的。否则,它将转到基于OR的第二个sql调用 有人能给我解释一下,或者提供更好的陈述,第二层或场景是按照最相关的第一个排序的,这意味着大多数选项匹配为第一个条目,并从那里向下排列吗 或者,如果你有更好的方法来处理这个搜索,可能只需要一个调用,那就更好了 基于和的第一个SQL调用: SELECT l.id,l.title,l.city FROM listings l JOIN lis
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
基于或的第二层调用:
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 | |
+-------------+---------+------+-----+---------+----------------+
示例导入数据可在以下位置找到:
清单:
清单\u设施\u外部参照:我怀疑您想要:
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 IN (1, 8, 54, 11) AND
l.city = 'Orlando' AND
l.state = 16
GROUP BY l.id, l.title, l.city
ORDER BY COUNT(*) DESC;
具有和的版本将永远不会返回任何行。第一个查询将始终失败。没有哪一行的设备id是1号、11号和5号戈登,瓦利:我现在明白了,谢谢。时间太多了。