SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 23.05.2013 13:25:33

mmx
Участник
Зарегистрирован: 23.05.2013
Сообщений: 11

Помогите выбрать данные в диапазоне цифр

Сабж, мин. макс. значения могут быть разные, например, мин.=3, макс.=1500589365
Выбираю позиции по 2003-2007:
SELECT *
FROM `table_product`
WHERE `fields`
REGEXP '^Год выпуска+(.*)?200[3-7]+(.*)?$'

Пожалуйста, дайте совет по выбору данных из произвольного диапазона цифр.

Неактивен

 

#2 23.05.2013 13:36:32

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Помогите выбрать данные в диапазоне цифр

Приведите пример данных в fields (несколько штук) и пример результата, который Вы хотите получить.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 23.05.2013 13:48:15

mmx
Участник
Зарегистрирован: 23.05.2013
Сообщений: 11

Re: Помогите выбрать данные в диапазоне цифр

deadka написал:

Приведите пример данных в fields (несколько штук) и пример результата, который Вы хотите получить.

-------------------
Год выпуска|2007
Марка|Renault
Пробег|23000
------------------
Год выпуска|2003
Марка|Iveco
------------------
Год выпуска|1985
------------------
Кредит|Да
Состояние|Отличное
-----------------

Получить позиции, которые укладываются в диапазон произвольных минимальных и максимальных значений по выбранной строке в поле fields.

Отредактированно mmx (23.05.2013 13:49:48)

Неактивен

 

#4 23.05.2013 13:57:17

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Помогите выбрать данные в диапазоне цифр

Вообще в Вашей ситуации я бы разнес это поле fields на 2 wink, и было бы куда проще.

Но если нельзя - используйте
http://dev.mysql.com/doc/refman/5.0/en/ … n_position
чтобы найти символ |
Далее
http://dev.mysql.com/doc/refman/5.0/en/ … _substring
чтобы откусить цифровую часть строки.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 23.05.2013 14:15:10

mmx
Участник
Зарегистрирован: 23.05.2013
Сообщений: 11

Re: Помогите выбрать данные в диапазоне цифр

deadka написал:

Вообще в Вашей ситуации я бы разнес это поле fields на 2 wink, и было бы куда проще.

например? сейчас поиск провожу по некоторым полям без произвольных мин и макс SELECT *  FROM `table_product` WHERE `fields` REGEXP '^(Год выпуска|2007)+(.*)?(Марка|Renault)+(.*)?(Коробка передач|ручная)+(.*)?$'

Отредактированно mmx (23.05.2013 14:20:48)

Неактивен

 

#6 23.05.2013 14:39:16

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Помогите выбрать данные в диапазоне цифр

Те fields, что Вы привели - они имеют вид

ЧТО-ТО | ЕЩЕ ЧТО-ТО

Я имел в виду, что возможно лучше добавить в таблицу еще одну колонку и
ЧТО-ТО положить в один столбец, а
ЕЩЕ ЧТО-ТО в другой.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 23.05.2013 14:51:48

mmx
Участник
Зарегистрирован: 23.05.2013
Сообщений: 11

Re: Помогите выбрать данные в диапазоне цифр

deadka написал:

Те fields, что Вы привели - они имеют вид

ЧТО-ТО | ЕЩЕ ЧТО-ТО

Я имел в виду, что возможно лучше добавить в таблицу еще одну колонку и
ЧТО-ТО положить в один столбец, а
ЕЩЕ ЧТО-ТО в другой.

например, так:

fields_name          |  fields_value
-------------------------------------
Год выпуска            2007
Марка                    Renault
Пробег                   23000
Коробка передач     ручная
Панорамный люк      да

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

Отредактированно mmx (23.05.2013 14:52:28)

Неактивен

 

#8 23.05.2013 16:23:50

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Помогите выбрать данные в диапазоне цифр

mmx, Вы бы привели задачу свою более полно - таблицы, которые присутствуют, данные в них, и что вообще нужно, если еще что-то осталось непонятным. На первоначальный вопрос, имхо я ответил, текущая формулировка вопроса откровенна непонятна.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#9 24.05.2013 18:33:27

mmx
Участник
Зарегистрирован: 23.05.2013
Сообщений: 11

Re: Помогите выбрать данные в диапазоне цифр

наверное оптимальный вариант для поиска по полям - создание новой таблицы, например:
CREATE TABLE IF NOT EXISTS `fields` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `category_id` int(10) NOT NULL DEFAULT '0',
  `name` varchar(255) NOT NULL,
  `value` varchar(255) NOT NULL,
  `product_id` int(12) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM;
, но смущает то, что ранее при добавлении товара все поля и сам товар добавлялись одним инсертом, а сейчас = 1 в таблицу продукт + энное к-во полей в таблицу фиелдс или как то можно оптимизировать?

Неактивен

 

#10 24.05.2013 23:35:20

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Помогите выбрать данные в диапазоне цифр

Преждевременная оптимизация - корень многих зол. Плюс что-то мне подсказывает, что поиск будет производиться куда как чаще, чем вставка smile. А текущая структура таблица гораздо больше соответствует нормальному быстрому поиску.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#11 28.05.2013 17:26:26

mmx
Участник
Зарегистрирован: 23.05.2013
Сообщений: 11

Re: Помогите выбрать данные в диапазоне цифр

deadka написал:

А текущая структура таблица гораздо больше соответствует нормальному быстрому поиску.

К сожалению, по текущей структуре нельзя найти больше одного значения, хз как решить данную проблему

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson