[英]Mysql JOIN with LIKE statement
我有两张桌子,一张是城市,一张是pois。 我想从查询字符串中查找城市或城市。 查询字符串可以是ABC咖啡店或旧金山。 执行以下查询,但返回空集建议?
SELECT cities.city, cities.state, pois.name FROM cities, pois
WHERE cities.city OR pois.name LIKE '$queryString%';
表:城市
+---------+-------+---------------+
| city_id | state | city |
+---------+-------+---------------+
| 4 | CA | San Francisco |
+---------+-------+---------------+
表:pois
+--------+---------+-------------------------------+
| loc_id | city_id | name |
+--------+---------+-------------------------------+
| 2 | 4 | San Francisco Coffee Roasters |
+--------+---------+-------------------------------+
更新:基于@Johan的答案,我创建了以下查询,该查询返回以下结果。 返回的结果是正确的,但我还想返回一个单独的行,例如example A,结果类似于example A查询。 我认为工会是我所需要的吗?
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语句具有不同的列数
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%'
示例结果:
+-------------------------------+---------------+-------+
| name | city | state |
+-------------------------------+---------------+-------+
| San Francisco Coffee Roasters | San Francisco | CA |
+-------------------------------+---------------+-------+
+---------------+-------+
| city | state |
+---------------+-------+
| San Francisco | CA |
+---------------+-------+
事先有几点评论:
•不要使用SQL '89样式的隐式联接语法,这是一种反模式。
•改用显式SQL '92连接语法,请参见下面的第一个示例。
•如果$querystring
来自用户,则需要对其进行转义,请参见第一个示例。
这是示例代码:
$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%' ";
也许您想要一个UNION
$query = "SELECT c.name FROM cities c
WHERE c.name LIKE '%$querystring%'
UNION
SELECT p.name FROM pios p
WHERE p.name LIKE '%$querystring%' ";
按要求编辑
如果使用联合,则所有涉及的选择必须产生相同数量的列。
如果没有数据,则用null
代替。
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%'
要通过联接执行此操作:
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%'
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%';
或者,
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%'
SELECT cities.city, cities.state, pois.name FROM cities, pois
WHERE cities.city LIKE '$queryString%' OR pois.name LIKE '$queryString%';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.