在mysql中加入Query for autocomplete

时间:2013-03-12 18:18:29

标签: mysql join autocomplete

我想在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这可以吗?

4 个答案:

答案 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.ida.area_name将为空。