Убедитесь, что значение диапазона не перекрывается с существующими диапазонами - PullRequest
1 голос
/ 10 декабря 2011

У меня есть некоторая информация о диапазоне, хранящаяся в базе данных как min_age и max_age, например:

id      min_age     max_age
1       10          14
2       15          16
3       17          20

Я хочу провести некоторую проверку с использованием PHP (или MySql), чтобы перед созданием другой записимы уверены, что диапазон не перекрывается с существующим диапазоном.Итак, id = 4, min_age = 21, max_age = 25 было бы хорошо, но id = 4, min_age = 20, max_age = 25 не удастся.Мой (psuedo) код, таким образом, далеко:

$age['min'] = $x;
$age['max'] = $y;
$current ranges = db_query('SELECT min_age, max_age FROM age_table')->fetchAll();
foreach ($age as $limit)
{
    for ($i = 0; $i < count($current_ranges); $i++)
    {
        if ($limit >= $current_ranges[$i]->min_age && $limit <= $current_ranges[$i]->max_age) $conflict = $result[$i]->entity_id;
    }
}
    if ($conflict) fail();

Но это упрощение (не так ли?), Поскольку он просто проверяет, попадают ли значения min / max в определенные диапазоны.Я думаю, что это может работать, но использует некоторую нечеткую логику с моей стороны ... Кто-нибудь может помочь мне обострить это?Приветствия ...

Ответы [ 2 ]

1 голос
/ 10 декабря 2011

Вы просто используете следующий SQL-запрос для достижения этого, как

SELECT min_age, max_age FROM age_table WHERE min_age >= $min_age or max_age >= $max_age

если в вашей базе данных нет диапазона, чем этот запрос, то ничего не будет возвращено, он вернет отфильтрованные строки.

1 голос
/ 10 декабря 2011

Я бы создал массив со всеми значениями в диапазоне [min, max], а затем пересек со всеми существующими диапазонами:

$new_range = range($min, $max);
foreach ($current_ranges as $range) {
  if (count(array_intersect($new_range, range($range["min"], $range["max"])))) {
    throw new RangeException();
  }
}

Это создаст исключение для первого уже существующего диапазона, совпадающего с новым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...