2013-04-16 30 views
0

我有兩個表格,一個叫做區域,一個叫做區域。 表格區域包含郵政編碼和區域。MySQL加入和區別

如:

區表包含郵編 - AB10 區域 - 阿伯丁

區域覆蓋表包含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

你確定'SELECT DISTINCT FROM ...'正在工作嗎?它可能需要一個領域。 – fedorqui

+0

對不起,我忘了補充說它是'SELECT DISTINCT postcode FROM' – Sygon

+0

你可以先檢索** area **表格中匹配'region'的行,並將它與第二個表** areacovered **聯合起來,並且匹配'postcode' ,所以最終查詢將包含所有具有區域匹配或匹配的郵編的行的集合。 – dreamweiver

回答

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" 
    }, 
    ... 
] 
+0

謝謝,我會試試看。因此,對於JSON部分,我是否會在循環內部放置if語句來檢查返回的區域或郵編的行數? – Sygon

+0

@JackWillmor - 抱歉,錯過了 - 添加它。我會返回並顯示給用戶。 –

+0

我仍然有問題獲取結果以獲取自動完成。 JSON會是什麼樣子? – Sygon