首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql用LIKE语句连接

问Mysql用LIKE语句连接
EN

Stack Overflow用户
提问于 2011-09-06 19:43:13
回答 4查看 6.1K关注 0票数 0

我有两张桌子,一张是城市的,一张是波士的。我希望从查询字符串中找到城市或pois。查询字符串可以是ABC咖啡店或旧金山。下面的查询执行,但返回空集建议?

代码语言:javascript
复制
SELECT cities.city, cities.state, pois.name FROM cities, pois 
WHERE cities.city OR pois.name LIKE '$queryString%';

表:城市

代码语言:javascript
复制
+---------+-------+---------------+
| city_id | state | city          |
+---------+-------+---------------+
|       4 | CA    | San Francisco |
+---------+-------+---------------+

表: pois

代码语言:javascript
复制
+--------+---------+-------------------------------+
| loc_id | city_id | name                          |
+--------+---------+-------------------------------+
|      2 |       4 | San Francisco Coffee Roasters |
+--------+---------+-------------------------------+

更新:基于@Johan的答案,我创建了以下查询,该查询返回以下结果。返回的结果是正确的,但我也希望使用类似于示例A查询的方法返回一个单独的行,比如示例A结果。我认为工会是我所需要的?

代码语言:javascript
复制
 SELECT p.name, c.city, c.state
FROM cities c
INNER JOIN pois p ON ( p.city_id = c.city_id )
WHERE p.name LIKE '%San Francisco%'


+-------------------------------+---------------+-------+
| name                          | city          | state |
+-------------------------------+---------------+-------+
| San Francisco Coffee Roasters | San Francisco | CA    |
+-------------------------------+---------------+-------+

示例查询:!此查询返回错误#1222 -使用的SELECT语句有不同的列数

代码语言:javascript
复制
SELECT p.name, c.city, c.state
FROM cities c
INNER JOIN pois p ON ( p.city_id = c.city_id )
WHERE p.name LIKE '%San Francisco%'
UNION SELECT c.city, c.state
FROM cities c
WHERE c.city LIKE '%San Francisco%'

示例A结果:

代码语言:javascript
复制
+-------------------------------+---------------+-------+
| name                          | city          | state |
+-------------------------------+---------------+-------+
| San Francisco Coffee Roasters | San Francisco | CA    |
+-------------------------------+---------------+-------+
+---------------+-------+
| city          | state |
+---------------+-------+
| San Francisco | CA    |
+---------------+-------+
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-06 19:48:02

代码语言:javascript
复制
SELECT DISTINCT p.name, c.city, c.state
FROM cities c
LEFT OUTER JOIN pois p ON p.city_id = c.city_id 
WHERE cities.city LIKE '%$queryString%' 
OR pois.name LIKE '%$queryString%';

或者,

代码语言:javascript
复制
SELECT p.name, c.city, c.state
FROM cities c
INNER JOIN pois p ON p.city_id = c.city_id
WHERE p.name LIKE '%$queryString%'
UNION SELECT NULL, c.city, c.state
FROM cities c
WHERE c.city LIKE '%$queryString%'
票数 1
EN

Stack Overflow用户

发布于 2011-09-06 21:08:58

事先有几点意见:

·不要使用SQL '89风格的隐式连接语法,这是一种反模式。

·改用显式SQL '92联接语法,参见下面的第一个示例。

·如果$querystring来自您需要转义的用户,请参见第一个示例。

下面是示例代码:

代码语言:javascript
复制
$querystring = mysql_real_escape_string($querystring);
$query = "SELECT c.name, p.name FROM cities c 
          INNER JOIN pios p ON (p.city_id = c.id)
          WHERE c.name LIKE '%$querystring%' 
             OR p.name LIKE '%$querystring%' ";

或者你想要一个联盟

代码语言:javascript
复制
$query = "SELECT c.name FROM cities c 
          WHERE c.name LIKE '%$querystring%'
        UNION
          SELECT p.name FROM pios p 
          WHERE p.name LIKE '%$querystring%' ";

按请求编辑

如果使用union,则所涉及的所有选择都必须生成相同数量的列。

如果您没有数据,只需替换null即可。

代码语言:javascript
复制
SELECT p.name, c.city, c.state
FROM cities c
INNER JOIN pois p ON ( p.city_id = c.city_id )
WHERE p.name LIKE '%San Francisco%'
UNION 
SELECT NULL as name, c.city, c.state
FROM cities c
WHERE c.city LIKE '%San Francisco%'
票数 3
EN

Stack Overflow用户

发布于 2011-09-06 19:48:47

若要通过联接执行此操作:

代码语言:javascript
复制
SELECT C.city, C.state, P.name 
FROM cities C
LEFT JOIN pois P ON P.city_id=C.id
WHERE C.city LIKE '$queryString%'
  OR P.name LIKE '$queryString%'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7325261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档