我有一个包含4列的表
ID,城市,州,国家
我想搜索第一个城市然后搜索州和国家。
我正在使用以下查询,但它似乎对我不起作用。
(SELECT * FROM `Destination_Detail` WHERE `city` like '%new york%')
union
(SELECT * FROM `Destination_Detail` WHERE `state` like '%new york%')
union
(SELECT * FROM `Destination_Detail` WHERE `country` like '%new york%')
我正在使用expedia的数据库,需要实现像expedia一样的搜索。
首先它给了我重复的条目。我认为这不是我用来获得结果的正确方法必须有一些有效的方法。
请帮我查询一下。
由于
答案 0 :(得分:1)
select * FROM `Destination_Detail`
where city like '%new york%'
or state like '%new york%'
or country like '%new york%'
order by city like '%new york%' desc,
state like '%new york%' desc,
country like '%new york%' desc
答案 1 :(得分:0)
您可以将任务分成两个不同的查询:一个用于查找完全匹配,另一个用于查找部分匹配。
(SELECT * FROM places WHERE city = "india" OR state = "india" OR country = "india" ORDER BY city DESC, state DESC, country DESC)
UNION
(SELECT * FROM places WHERE city LIKE "%india%" OR state LIKE "%india%" OR country LIKE "%india%" ORDER BY city DESC, state DESC, country DESC)
如果用户搜索" india",那将返回将印度作为他们的国家的地方(假设没有像印度这样的城市或州名的地方),然后是印第安纳波利斯等部分匹配的城市,像印第安纳州等。
改进的想法:你可以添加第三个查询来排序匹配" india%"在匹配之前,比如"%india%",优先考虑单词匹配开头的部分匹配。这也可以通过INSTR(列," searchstring")对部分匹配进行排序来实现,这将带来额外的好处,即排序匹配,其中子字符串发生在稍后发生的字符串之前(&#34) ; abindia"会来#abcindiana")。
编辑:以下是我测试过的查询:
CREATE TABLE places(
city VARCHAR(255),
state VARCHAR(255),
country VARCHAR(255)
);
INSERT INTO places(city, state, country) VALUES('New York', 'New York', 'USA');
INSERT INTO places(city, state, country) VALUES('Manhattan', 'New York', 'USA');
INSERT INTO places(city, state, country) VALUES('Niagara Falls', 'New York', 'USA');
INSERT INTO places(city, state, country) VALUES('Delhi', '', 'India');
INSERT INTO places(city, state, country) VALUES('Mumbai', '', 'India');
INSERT INTO places(city, state, country) VALUES('Indianapolis', 'Indiana', 'USA');
INSERT INTO places(city, state, country) VALUES('Fort Wayne', 'Indiana', 'USA');
"纽约的结果":
CITY STATE COUNTRY
New York New York USA
Manhattan New York USA
Niagara Falls New York USA
印度"
的结果CITY STATE COUNTRY
Mumbai India
Delhi India
Indianapolis Indiana USA
Fort Wayne Indiana USA
我没有来自expedia.co.in的完整数据库,但对我而言,它看起来至少我运行的查询返回了正确的结果。你的结果有何不同?