基本上,这个想法是人们根据长度过滤搜索结果。但是,长度存储在文本字段中,因为这可能因项目而异。一个项目可能是 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/