2013-02-06 43 views
0

我是一个新手。我想从MySQL连接3个字段(city,provinceName,countryName)到逗号分隔的字符串中,并以“city”作为关键字返回JSON中的字符串。我无法获取字符串,也无法将它们构建为JSON中的完整文本。我的PHP是:将多个MySQL字段连接成一个JSON响应

$fetch = mysql_query("SELECT DISTINCT city GROUP_CONCAT(DISTINCT city, stateProvinceName, countryName SEPARATOR ',') FROM neighborhoods 
WHERE countryAbbreviation='$countryAbbreviation' AND stateProvinceName IS NOT NULL 
") or die(mysql_error()); 
while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)){ 
$row_array['city'] = $row['city']; 
array_push($return_arr,$row_array); 
} 
echo json_encode($return_arr); 

当我测试查询时,它不是用逗号分隔的。相反,我得到了魁北克城魁北克队的加拿大队。当我运行该网站时,JSON响应仅为{“city”:“Quebec City”}。期望的响应是{“city”:“魁北克市,魁北克省,加拿大”} - 或者在一般情况下,多个“城市”对象。

我应该改变什么。请具体说明。我没有很好地遵循一般说明。

回答

0

您使用城市字段而不是拼接字符串。

$fetch = mysql_query("SELECT DISTINCT CONCAT_WS(',', city, stateProvinceName, countryName) AS full_address FROM neighborhoods 
WHERE countryAbbreviation='$countryAbbreviation' AND stateProvinceName IS NOT NULL 
") or die(mysql_error()); 
while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)){ 
$row_array['city'] = $row['full_address']; 
array_push($return_arr,$row_array); 
} 
echo json_encode($return_arr); 
+0

这是一个很大的进步,因为我得到了3个字段,但他们没有逗号。我得到[{“city”:“Quebec CityQuebecCanada”}] –

+0

GROUP_CONCAT在我的MySQLWorkbench中以粉红色显示。这可能意味着什么,但我不知道是什么。测试查询不会连接逗号。 –

+0

尝试使用'CONCAT_WS'而不是'GROUP_CONCAT'。 'GROUP_CONCAT'与'GROUP_BY'一起使用。我已经更新了答案。但也许你想按这些结果分组? –

0
while(....) 
{ 
    $city = $row['city'] . ", "; 
} 
//cuts off last comma, alternatively convert above loop to do/while 
$city = substr($city, strpos(",", $city, -1)); 

echo json_encode($city); 
+0

如果你这样做,为什么不呢:while(....) { $ city [] = $ row ['city']; } echo json_encode(implode(',',$ city)); – SativaNL

0

在城市中使用group by子句时,如果您希望每个城市具有不同的值。