【问题标题】:PHP SQL PDO Wildcard queryPHP SQL PDO 通配符查询
【发布时间】:2019-04-30 20:19:21
【问题描述】:

我有一个包含这些值的表:

123, 159, 147, 258, 369

我需要找到同时包含1和2但不包含3的数据。结果应该是:

159, 147, 258

我已经尝试过通配符运算符 % - [] 并且没有运气。

$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);

$sql = "SELECT * FROM numbers WHERE track LIKE '%[12]%' AND track NOT LIKE '%[3]%'";
$q = $conn->prepare($sql);
$q->execute(array($title));

【问题讨论】:

    标签: mysql sql wildcard sql-like


    【解决方案1】:

    您使用的语法适用于 SQL Server,但不适用于 MySQL。你可以使用正则表达式:

    WHERE track REGEXP '[12]'
    AND track NOT LIKE '%3%'
    

    或者直接使用LIKE:

    WHERE (track LIKE '%1%' OR track LIKE '%2%')
    AND track NOT LIKE '%3%'
    

    【讨论】:

    • 这行得通!谢谢!但是是否有可能使“不喜欢”成为正则表达式?
    • 我自己发现了:WHERE track REGEXP '[12]' AND track NOT REGEXP '[3]'
    【解决方案2】:

    不确定这是否是您的意图,但如果您尝试仅从 3 位数字池中选择以 1 或 2 开头的记录,这将起作用。

    SELECT * FROM numbers WHERE track LIKE '%1[0-9][0-9]' OR track LIKE '%2[0-9][0-9]'
    

    【讨论】:

    • 记录只需要包含数字,不能以数字开头。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    相关资源
    最近更新 更多