我想在mysql php中为autocomplete.i写一个查询,有两个表
CREATE TABLE IF NOT EXISTS `city` (
`id` int(22) NOT NULL AUTO_INCREMENT,
`city_name` varchar(44) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=64 ;
和table2是
CREATE TABLE IF NOT EXISTS `area` (
`id` int(22) NOT NULL AUTO_INCREMENT,
`city_id` int(44) NOT NULL,
`area_name` varchar(33) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2561 ;
当用户键入任何单词时,它将在区域表(area_name)和城市表(city_name)中搜索...我想在一个字段中返回结果。例如,如果键入“RAK”,它将搜索area table.if发现它将返回city_id和area_name否则它将在city.i中搜索需要获取cityid,areaid和匹配的text.ow这可以吗?
答案 0 :(得分:1)
拥有OR
子句将导致两个表中的表扫描。使用UNION
将允许使用索引:
SELECT
city_id,
id AS area_id,
area_name AS name,
FROM
area
WHERE
area_name LIKE 'searchterm%'
UNION
SELECT
id AS city_id
NULL AS area_id,
city_name AS name
FROM
city
WHERE
city_name LIKE 'searchterm%'
ORDER BY
name;
答案 1 :(得分:0)
你可能会从这样的事情开始:
select ifnull( area_name, city_name ) from area
join city on area.city_id = city.id
where area_name = <name> or city_name = <name>;
我需要建立一个小提琴来测试它,但是将一个结果“故障转移”到另一个结果的概念就在那里。
答案 2 :(得分:0)
您可以使用此查询
SELECT
IF(city_name IS NULL ,area_name , city_name) as `Area`
FROM city AS c
LEFT JOIN area AS a ON a.city_id = c.id
WHERE city_name LIKE 'keyword%' OR area_name LIKE 'keyword%'
答案 3 :(得分:0)
SELECT
c.id, c.city_name, a.id, a.area_name
FROM
city AS c
LEFT OUTER JOIN area AS a ON a.city_id = c.id
WHERE c.city_name LIKE 'input%'
OR a.area_name LIKE 'input%'
如果匹配仅在城市名称上,则 a.id
和a.area_name
将为空。