【问题标题】:Select all field where field value not in array选择字段值不在数组中的所有字段
【发布时间】:2012-03-20 08:44:24
【问题描述】:

我在一个变量中有这个数组

$regions = |north|south|west|

和一个包含单个值的数据库字段“Region”,例如北

我需要一个 select 语句,它将选择“Region”的值不是数组中列出的任何值的所有字段。例如北、南、西。

【问题讨论】:

  • 你试过什么? $regions 来自哪里?因为那不是数组。
  • 表单中有多个复选框。如果用户选择了南北西,我需要在区域字段中显示所有没有南北或西的记录
  • Rocket,您的评论帮助我解决了问题。我将数据作为字符串而不是数组传递。

标签: php mysql


【解决方案1】:

您可以在 SQL 中使用WHERE field NOT IN('value1', 'value2', ...) 执行此操作。 Basic string functions 可能足以让您的数组采用这种格式。

【讨论】:

  • 值在一个数组中,它们会根据用户的选择而改变
【解决方案2】:
$regions = "north|west|south";
$regionsArray = explode('|', $regions);

for ($i = 0; $i < count($regionsArray); $i++) {
    $regionsArray[$i] = "'" . $regionsArray[$i] . "'";
}

$query = "SELECT *
FROM ...
WHERE Region NOT IN (" . implode(",", $regionsArray) . ")";

这假定您的 $regions 变量是一个如上所述的字符串,而不是一个数组。

如果它之前是一个数组,那么很可能不需要将其转换为字符串(上面的代码将其转换回数组)。

【讨论】:

  • 我试过这个,但这是我得到的:警告:mysql_fetch_row():提供的参数不是有效的 MySQL 结果资源
  • @sheredia: $regions 是一个数组还是一个字符串,包含例如“北|西|南”?
  • @sheredia:我编辑了答案以向您展示更详细的代码示例。
  • 该代码生成一个 SQL 语句,它将从您的表中选择所有条目,除了 Region 包含任何值的条目。问题出在哪里?
  • 这是我得到的错误警告:mysql_fetch_row():提供的参数不是有效的 MySQL 结果资源...
【解决方案3】:

也许你忘记了 mysql_real_escape_string() ?

function db_escape($value)
{
    return '"'.mysql_real_escape_string($value).'"';
}

$regions = array('north','west','south');

$query = "SELECT *
FROM `table`
WHERE `Region` NOT IN (" . implode(",", array_map('db_escape',$regions)) . ")";

【讨论】:

    猜你喜欢
    • 2017-03-06
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多