【发布时间】:2013-10-08 14:00:20
【问题描述】:
我正在尝试从一个表 (“SP_Cont”) 中获取联系信息,然后根据县代码 (CID) 从“Counties”表中获取实际的县名称 (“CTitle”)。
SELECT
CONCAT_WS(', ',NULLIF(SP_Cont.Address1, ''),NULLIF(SP_Cont.Address2, ''),NULLIF(SP_Cont.Address3, ''),NULLIF(SP_Cont.Address4, ''),NULLIF(SP_Cont.Address5, ''),NULLIF(SP_Cont.City, ''),NULLIF(Postcode, '')) AS Address, SP_Cont.CID, SP_Cont.RevTot,
Counties.CTitle
FROM
SP_Cont
INNER JOIN
Counties
ON
Counties.CID=SP_Cont.CID
WHERE
SP_Cont.SPCode = "26"
我想要实现的是一个看起来像这样的地址......
地址 1、地址 2、地址 3、城市、县、邮政编码。
我知道上面不会这样做,但至少我不必像目前那样在 PHP 页面中运行另一个查询来添加县:
if (!empty($BAPrint['CID'])) {
$CQuery = mysql_query ("SELECT CTitle FROM Counties USE INDEX (CIDT) WHERE CID = ".$BAPrint['CID']);
$CPrint = mysql_fetch_array ($CQuery);
$Address .= ", ".$CPrint['CTitle'];
}
所以它看起来像这样:
Address1、Address2、Address3、城市、邮政编码、县。
有没有办法得到想要的地址格式
Address1、Address2、Address3、城市、县、邮政编码。?
另一个问题是如果 SP_Cont 不包含 CID 代码,则脚本会失败。无论如何使用 CONCAT_WS 如果有一个 NULL CID 脚本仍然运行,但没有县标题?
干杯 G
【问题讨论】:
-
您的查询看起来不错,您可以将所有需要的字段添加到 concat_ws。如果您没有得到任何结果,那是因为您在应用过滤器后得到了结果。您的过滤器是内部连接条件和 where:“ Counties.CID=SP_Cont.CID and SP_Cont.SPCode = 26”
-
@AdrianBR 你是对的。我刚刚使用了一个我知道有 CID 代码的 SPCode,它显示了 1 个结果。问题在这里很清楚,如果没有 CID 代码,则脚本无法产生任何结果。即使 CID 代码为空/NULL,有没有办法 concat_ws 我上面提到的所有字段?为您的评论干杯。
-
如果您没有 CID 代码,则无法加入您的县表。您可以将连接更改为左连接,因此 SP_CONT 表中的结果无论如何都会被发布。另外,ifnull,not nullif
-
@AdrianBR 是的,可行:) 我想你不知道你是否可以在 CONCAT_WS 中进行内部连接,以便我可以按照我想要的方式对其进行格式化?干杯
-
你可以,贴在下面
标签: php mysql select inner-join concat-ws