mysql - mysql 查询中的动态值

标签 mysql sql-like

我试图使用下面的查询获取结果,每个加盟商的 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/

相关文章:

php - 谷歌将 MySQL lat lng 映射到 JavaScript

php - Foreach 在 where 语句中?

mysql - MySQL :how to use Wildcard in Subquery?

mysql - 如何在mongodb和mysql中搜索搜索到的子字符串中的某个字符串?

sqlite - 为什么SQLite的LIKE%在JOIN中不起作用?

php - 我的 SQL 搜索查询无法区分列属性?

php - 为 foreach() 警告提供的参数无效

mysql - 计算字段值出现次数最多的次数

mysql - 我不断收到查询错误 (1064) : Syntax error near , 知道如何修复它

sql - t-sql, sql表内连接电子表格