Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql sql查询以搜索城市、州和国家,如expedia.co.in_Mysql_Search_Sql Like - Fatal编程技术网

Mysql sql查询以搜索城市、州和国家,如expedia.co.in

Mysql sql查询以搜索城市、州和国家,如expedia.co.in,mysql,search,sql-like,Mysql,Search,Sql Like,我有一个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`

我有一个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的数据库,需要实现相同的搜索

首先,它给了我重复的条目。而且我认为这不是我用来获得结果的正确方法。必须有一些有效的方法

请帮我查询一下


谢谢

您可以将任务分为两个不同的查询:一个用于查找精确匹配项,另一个用于查找部分匹配项

(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%”等匹配项进行排序,优先考虑单词开头相同的部分匹配项。这也可以通过INSTR(列,“searchstring”)对部分匹配进行排序来实现,这将有另外一个好处,即对子字符串出现较早的匹配进行排序,然后再对子字符串进行排序(“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');
“纽约”的结果:

“印度”的结果:


我没有expedia.co.in的完整数据库,但在我看来,至少我运行的查询返回了正确的结果。您的结果有何不同?

您成功地编写了一个复杂的
联合
,但没有想到一个简单的
语句<代码>从xx中选择*城市如“%xx%”或州如“%xx%”或…
没有bro@LievenKeersmaekers我已经想到了,但它不能完成我的工作。请看expedia搜索,它是完全不同的。例如,如果我键入纽约搜索,那么结果应该首先是纽约市,然后是纽约州的第二个记录。若我搜索印度,那个么结果应该排在除印度以外的任何城市的前面,因为并没有一个城市被命名为印度,而已经有一些国家的城市像印第安纳州等。如果没有,请在expedia.co.ini上搜索。如果排序器是您的问题,我建议提供一些测试数据和预期输出。你不能指望任何人去了解expedia是如何做到这一点的,看看答案和评论,目前还不清楚。它会首先根据城市给出结果,但假设我在expedia上搜索了印度,然后首先显示了印度国家的结果,然后显示了其他任何东西,但这里它首先显示了印第安纳波利斯市,等等,在城市状态之后,然后是国家。不,它没有给我正确的结果。首先我搜索了印度,因为它给了我4个印度国家的结果,然后是美国印度州的1个结果,然后是印度国家的结果。然后我搜索了纽约,但在这种情况下,它首先给出的结果是纽约州,而不是城市。我不知道expedia.co.inI中使用了什么smartness。我用我使用的测试数据和查询更新了帖子。
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