php - MySQL/PHP - 过滤非数字字段的数值

标签 php mysql filter filtering

基本上,这个想法是人们根据长度过滤搜索结果。但是,长度存储在文本字段中,因为这可能因项目而异。一个项目可能是 16,20 米,另一个可能是 8.1m。

如何开始?从数据库中获取所有可能的值,将它们更改为过滤的格式(将所有内容解析为仅数字,逗号分隔?),获取关联的 ID,然后仅显示与这些 ID 相关的所有信息,或者是否存在我还没有找到的方法?

亲切的问候。

编辑:标准化格式是一种解决方案,但我不能在这种情况下应用。我不被允许这样做。情况变得更糟 - 过滤可以同时具有最小值和最大值。最小值:4 和最大值:8 应显示这些长度之间的所有内容。 6.1 米,7,82 米,5.

最佳答案

因为我无法更改数据库的设置方式(标准化是,为长度本身保留单独的字段,一个 float / double ,以及一个用于附录的字段),我决定采用这种方法.

首先得到所有可能的长度,然后:

foreach($lengths as $length) {
 $cLengths[$length['item_id']] = preg_replace("/[^0-9,.]/", "", str_replace(',', '.', $length['field_value']));
}

假设随后将在 URL 中使用 &minLength=2&maxLength=10 调用该页面:

$minLength = $_GET['minLength'];
$maxLength = $_GET['maxLength'];
if(!is_null($minLength) && !is_null($maxLength)) {
 $filteredItems = '';
 foreach($cLengths as $itemId => $cL) {
  if($cL >= $minLength && $cL <= $maxLength) {
   $filteredItems .= $itemId . ',';
  }
 }
 $filteredItems = substr($filteredItems, 0, -1);
 $where .= 'item_id IN(' . $filteredItems . ') AND ';
}

关于php - MySQL/PHP - 过滤非数字字段的数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20946437/

相关文章:

PHP 7 - 比较匿名类实例

php - 数据库全选

php - 属性的 MySQL 增量值 - 有时会丢失(?)

c# - Serenity-将表单中的值添加到 2 个表中

mysql - MySQL 中何时使用单引号、双引号和反引号

spring - 在 Spring 集成测试中未注入(inject)自定义过滤器

javascript - 如何在Javascript中获取不包含在另一个数组中的数组项

php - 将变量和字符串转换为日期时间格式

javascript - jQuery为具有相同src的图像添加alt标签

javascript - 在放大的弹出窗口中显示动态内容