【问题标题】:Check if databasefield contains value from imploded variable检查数据库字段是否包含来自内爆变量的值
【发布时间】:2013-10-17 09:03:23
【问题描述】:
$users = explode(",", $particiTemp);
                foreach($users as $user) {
                    echo "$user";
                }

                $checkSQL = mysql_query("SELECT * FROM this WHERE x>'$y' && v<'$z' &&  user IN ($particiTemp)");
                while($checkData = mysql_fetch_array($checkSQL)){

                }

我有点卡在这里......

我想检查 $particiTemp(例如:$particiTemp = "2,23,11,4,")是否在字段 $checkData[user] ($checkData[user] = "5,22,11,23";) 中。

我尝试将两者都炸开并尝试mysql IN,但我不知道如何检查字段$checkData[user] 是否包含内爆$particiTemp 之一

【问题讨论】:

  • 这是一个糟糕的数据库设计示例。将您的 checkData 存储在单独的表中,用户 ID 和数据作为列。每行一个数据值。然后查询变得非常简单且易于维护。
  • 我不完全明白你的问题。这是 MySQL 还是 PHP 相关?您能否根据需要从数据库中获取数据,并且需要知道如何检查变量,或者您想要一些关于 MySQL 语句的建议?顺便说一句, mysql_* 函数太迟了 2000 年。考虑使用 MySQLi 或 PDO
  • 我不知道我是否可以用 mysql 检查这个。这也是我在 PHP 中尝试它的原因。这些“particitemp”最多可以包含 20 个用户(id)及其与 $checkData[user] 相同的字段,只是为了检查它是否已经与该用户存在...
  • 不确定我是否理解你想要达到的目标(如果你能提供更多细节,我可能会给你更多有用的建议),但我理解它的方式,你也接近这个了比必要的复杂。查看Jelle的评论
  • 感谢您的帮助。我会以某种方式完成它...也许它真的很简单,但我现在无法完成它...无论如何谢谢。

标签: php mysql explode implode


【解决方案1】:

"In" 子句需要值为 '2','23','11','4' 而不是 "2,23,11,4,"

所以操作你的数组以获得结果。

$innval = '';
foreach($users as $user) {
  if($user != '')
    $innval .= "'".$user."',";
}
$innval = substr($innval,0,-1);  // to remove last extra ,

现在在你的查询中使用这个 $innval 变量来获取结果

$checkSQL = mysql_query("SELECT * FROM this WHERE x>'$y' && v<'$z' &&  user 
IN ($innval)");

希望对你有帮助

【讨论】:

    【解决方案2】:

    想法:分解数组来检查,为每个带有 INSTR 的 mysql_query。

    应该可以,现在试试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      相关资源
      最近更新 更多