我试图使用下面的查询获取结果,每个加盟商的 idRegion 在数据库中记录为 1,2,3,4,所以我想要的是显示 idRegion 2 的所有加盟商。我通过 $_Get 获取 idRegion 。这仅显示昏迷前的第一个数字,我认为它应该准备好整个字符串 1,2,3,4 ?当我使用静态值时有效吗?
$colname_franchisee = "-1";
if (isset($_GET['id'])) {
$colname_franchisee = $_GET['id'];
}
$query_franchisee = sprintf("SELECT * FROM franchise WHERE stiShowInLinks = 'Y' AND idRegion LIKE '%s%' ORDER BY stiName ASC", $colname_franchisee);
最佳答案
尽管我不喜欢你的数据库设计,但这应该可行:
$query_franchisee = sprintf("
SELECT *
FROM franchise
WHERE
stiShowInLinks = 'Y' AND (
idRegion = '%d' OR
idRegion LIKE '%d,%%' OR
idRegion LIKE '%%,%d' OR
idRegion LIKE '%%,%d,%%'
)
ORDER BY stiName ASC
",
$colname_franchisee,
$colname_franchisee,
$colname_franchisee,
$colname_franchisee
);
sprintf 函数将 %
字符视为格式说明符,并以特殊方式处理接下来的几个字符。为了按字面意思使用 %
字符,您必须使用 %%
。因此,在 sprintf 之后,您的查询将变为:
idRegion = '1234' OR
idRegion LIKE '1234,%' OR
idRegion LIKE '%,1234' OR
idRegion LIKE '%,1234,%'
关于mysql - mysql 查询中的动态值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7686744/