MySQL加入并且与众不同

时间:2013-04-16 11:59:02

标签: php jquery mysql

我有两个表,一个称为区域,一个称为覆盖区域。 表区域包含邮政编码和区域字段。

e.g:

区域表包含邮政编码 - AB10 区域 - Aberdeen

区域覆盖表包含 ID - 1 邮政编码 - AB10 日期 - 1364989057

现在我有一个搜索邮政编码或区域的表格。我正在使用JQuery的自动完成功能,可以获得邮政编码或区域,但不能同时获得两者。

目前我有:

$result = $db->query("SELECT DISTINCT `postcode` FROM `areaCovered` WHERE `postcode` LIKE '%$search%' ORDER BY `postcode` ASC") or die('Something went wrong');

然后我使用从数据库结果中检索到的数据并放入JSON:

$json = '[';
$first = true;
while ($row = $result->fetch_assoc())
{
    if (!$first) { $json .=  ','; } else { $first = false; }
    $json .= '{"value":"'.$row['postcode'].'"}';
}
$json .= ']';
echo $json;

我如何首先加入这两个表来搜索仅存在于区域覆盖表中的邮政编码或区域,然后输出结果,无论是区域还是邮政编码。

我希望这对你有意义,

感谢

1 个答案:

答案 0 :(得分:1)

您应该使用distinct而不是group by,而是加入它们。

以下内容:

select
    a.`postcode` as postcode,
    a.`region` as region,
from
    `area` as a
    inner join
        `areaCovered` as ac
    on
        a.`postcode`=ac.`postcode`
where
    a.`postcode` like '%$search%'
    or
    a.`region` like '%$search%'
group by
    a.`postcode`
order by
    a.`postcode` asc

最好我只是json_encode()整个结果集并解析它的客户端,但看起来你可能需要为jQuery插件提供一个特殊的JSON结构?

$list = array();
while ($row = $result->fetch_assoc()) {
    array_push(
        $list,
        array('value' => $row['postcode'] . ', ' . $row['region'])
    );
}

echo json_encode($list);

这将创建一个看起来像;

的JSON结构
[
    {
        "value": "123 45, Region 1"
    },
    {
        "value": "678 90, Region 2"
    },
    ...
]