Как вы храните и ищите числовые интервалы в MySQL / PHP? - PullRequest
0 голосов
/ 14 марта 2012

У меня есть следующий сценарий:

Пользователь будет вводить интервал и / или одиночные числовые коды, разделенные запятыми, для каждого продукта.

Пример таблицы неполных данных:

name        | codes
-----------------------------------
Product 1   | 239,300-350

Product 2   | 430-450,500,29

Product 3   | 780,2

Например, когда пользователь ищет код 321, он должен вернуть строку «Продукт 1.».

Есть ли способ выполнить этот поиск с помощью одного запроса?

Ответы [ 2 ]

4 голосов
/ 14 марта 2012

Вместо этого я бы предложил сделать это с двумя таблицами:

products:
 - name
 - id

code_ranges:
 - product_id
 - range_start
 - range_end

Тогда вы можете получить то, что хотите (для некоторых $input_id), используя соединение:

SELECT product.id, product.name
FROM products 
JOIN code_ranges ON products.id = code_ranges.product_id
WHERE code_ranges.range_start <= $input_id
    AND code_ranges.range_end >= $input_id

Вы можете иметь несколько строк в таблице code_ranges для каждого продукта, чтобы представить несколько разных диапазонов (например, 2-4,7-10 будет иметь две строки, одна с range_start=2 и range_end=4, а другая для диапазона 7-10).

Код продукта, который не является диапазоном, будет просто рассматриваться как диапазон, в котором начало и конец совпадают (например, 7 будет range_start=7 и range_end=7).

0 голосов
/ 30 октября 2013

У меня та же проблема, но первый ответ бесполезен. Так как при поиске диапазона кодов предметов = 239 невозможно определить, что этот предмет также содержит 300-350

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