Я использую php / mysql.
Я храню разделенные запятыми 6-значные числа в текстовом столбце таблицы в базе данных.
Я хочу получить метод, чтобы найти, какие числа в данном диапазоне присутствуют в моей базе данных.
Мой стол выглядит так:
|id|date|commaSeperatedList|
Теперь в качестве ввода в sql я хочу указать диапазон чисел (например, 234101-234200).
Поэтому я ожидаю, что результат будет в виде:
|id|date|number|
Итак, решение, над которым я работал, это: использование функции диапазона PHP.
Используя это, я создал строковое предложение Long Where.
foreach( $words as $word) {
$word=str_pad($word, 6, '0', STR_PAD_LEFT);
$whereClause .= ' commaSeperatedList LIKE "%' . $word . '%" OR';
}
Проблема в том, что: я не знаю точно, какие числа были сочтены общими.
например, допустим, список имеет:
109001,234122,234123,345650
Я даю диапазон (234101-234200)
Вышеприведенный оператор находит все строки, которые содержат любое число в указанном диапазоне. Однако я также хочу знать, какие именно цифры были сопоставлены. В моем приведенном примере эти цифры: 234122,234123
Итак, ожидаемый результат должен быть:
|1|date|234122|
|1|date|234123|
Любая помощь в этом отношении будет оценена.
В конце концов пришлось хранить данные путем нормализации.
Есть запросы (полнотекстовое соответствие), которые выполняли работу, но не только они были сложными, но и медленными.
Что касается меня, всегда лучше правильно хранить данные в нормализованном формате. (Это не торговля в пространстве / времени).
Для других в аналогичной ситуации. Сделайте дополнительную работу с данными и сохраните их правильно.
Спасибо всем за ценные ответы!
Попробуйте этот код может помочь вам найти между диапазонами
<?php
$list = "109001,234122,234123,345650";
$from = "234101";
$to = "234200";
$list = explode(",",$list);
foreach($list as $val)
{
if($val > $from && $val < $to)
{
echo $val."<br>";
}
}
?>