|
|
|
| Есть запрос:
select id,name,vitrina,image,filter_name
from data
|
1 | запись1 | Y | null | vitrina
поле filter_name содержит названия поля по которому необходимо отсечь данные, можно ли во время выборки использовать условия отбора данных по полю название которого получается при выборки
select id,name,vitrina,image,filter_name
from data
WHERE vitrina = 'Y'
|
| |
|
|
|
|
|
|
|
для: dimaxz
(10.01.2012 в 11:27)
| | объясните как так получилось что название поля запихнули в другое поле?
с чем это связано и какие цели преследовались?
скорее всего база данных организована неверно | |
|
|
|
|
|
|
|
для: Valick
(10.01.2012 в 11:40)
| | запрос упростил на самом деле организация такая: две таблицы в одном товары с полями: param1,param2,param3, и т.д. (не более 10-ти)
в другой
(id,name,code,field)
1 | наименование | title | param1
назначение полей допустим param1 = наименование, param2 = цена, и т.д то есть можно добавлять другие параметры но не более 10 и по ним фильтровать при выборке, добавил новый параметр param3 = витрина, именно по нему мне необходимо отфильтровать
п.с. такая структура исторически сложилась | |
|
|
|
|
|
|
|
для: dimaxz
(10.01.2012 в 11:50)
| | пытаюсь мудрить с переменными но пока без успешно | |
|
|
|
|
|
|
|
для: dimaxz
(10.01.2012 в 11:50)
| | это не структура - это геморрой
нарушены принципы организации бд, смешаны мухи с котлетами, вот теперь все и выходит мягко говоря боком
со стороны выглядит ткак ка будто вы накинули петлю себе на шею, и все сильнее своими же руками затягиваете, тут нужно думать даже не о изменении, а о написании другого кода, это будет проще чем переделать старый, а все данные можно будет перенести в новую базу благо что это разовая оперрация | |
|
|
|
|
|
|
|
для: Valick
(10.01.2012 в 12:23)
| | на самом деле не проще так как на такой структуре подвешано огромное количество проектов, и проектирование базы происходило много лет назад другими спецами (поэтому перепалачивать все из за одного запроса не очень выгодно в плане трудозатрат), вопрос не про оценку структуры а реализацию динамических переменных в запросе | |
|
|
|
|
|
|
|
для: dimaxz
(10.01.2012 в 12:30)
| | может быть как то через execute ? | |
|
|
|
|
|
|
|
для: dimaxz
(10.01.2012 в 12:30)
| | я то как раз вас хорошо понял(причем с первого поста, а дополнительный вопрос задавал на всякий случай), а вот вы меня нет
вы штангу в 50 кг поднимите?
а в 200кг?
всего-лишь 150кг разницы....
но вы же ее не поднимите, только по причине того что "ну очень нужно"
____
стало жутко интересно посмотреть хотя бы пару примеров запросов к такой структуре бд | |
|
|
|
|
|
|
|
для: dimaxz
(10.01.2012 в 11:50)
| | 10 параметров может быть в поле филд_нэйм или не ограничено? и можно запрос полный посмотреть как Вы до возникшей проблемы делали? | |
|
|
|
|
|
|
|
для: Lotanaen
(10.01.2012 в 12:56)
| | а смысл в этих неограниченных параметрах, если реально всего 10 полей, имена которых и есть эти параметры данного поля | |
|
|
|
|
|
|
|
для: Valick
(10.01.2012 в 12:58)
| | а для чего вообще это поле filter_name? не совсем понятно...
я так полагаю что запрос тогда нужно делать такого вида примерно :
select id,name,vitrina,image,filter_name
from data
WHERE filter_name='vitrina' AND vitrina = 'Y'
|
| |
|
|
|
|
|
|
|
для: Valick
(10.01.2012 в 12:58)
| | детали могут принадлежать к разным каталогам, в разных каталогах свой набор доп. параметров деталей, если в каталоге 1 сведение о витрине содержится в поле field_2 то в каталоге 2 в поле field_3 | |
|
|
|
|
|
|
|
для: dimaxz
(10.01.2012 в 14:01)
| |
CREATE TABLE catalog_data(
id INT(11) NOT NULL AUTO_INCREMENT,
cat_id INT(11) DEFAULT NULL,
par_id INT(11) DEFAULT NULL,
field0 TEXT DEFAULT NULL,
field1 TEXT DEFAULT NULL,
field2 TEXT DEFAULT NULL,
field3 TEXT DEFAULT NULL,
field4 TEXT DEFAULT NULL,
field5 TEXT DEFAULT NULL,
field6 TEXT DEFAULT NULL
PRIMARY KEY (dat_id)
)
ENGINE = MYISAM
AUTO_INCREMENT = 41617
AVG_ROW_LENGTH = 219
CHARACTER SET utf8
COLLATE utf8_general_ci;
|
CREATE TABLE catalog_config(
id INT(11) NOT NULL AUTO_INCREMENT,
cat_id INT(11) DEFAULT NULL,
type VARCHAR(255) DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
value TEXT DEFAULT NULL,
PRIMARY KEY (cfg_id)
)
ENGINE = MYISAM
AUTO_INCREMENT = 2326
AVG_ROW_LENGTH = 45
CHARACTER SET utf8
COLLATE utf8_general_ci;
|
SELECT catalog_data.*
, cfg1.name AS f_vitrina
, cfg2.name AS f_name
, cfg3.name AS f_brand
, cfg4.name AS f_article
, cfg5.name AS f_image
FROM
catalog_data
INNER JOIN catalog_config cfg1
ON catalog_data.cat_id = cfg1.cat_id AND cfg1.type = 'group' AND cfg1.value = 'vitrina'
INNER JOIN catalog_config cfg2
ON catalog_data.cat_id = cfg2.cat_id AND cfg2.type = 'data_techname' AND cfg2.value = 'name'
INNER JOIN catalog_config cfg3
ON catalog_data.cat_id = cfg3.cat_id AND cfg3.type = 'data_techname' AND cfg3.value = 'brand'
INNER JOIN catalog_config cfg4
ON catalog_data.cat_id = cfg4.cat_id AND cfg4.type = 'data_techname' AND cfg4.value = 'article'
INNER JOIN catalog_config cfg5
ON catalog_data.cat_id = cfg5.cat_id AND cfg5.type = 'data_techname' AND cfg5.value = 'image_ba'
WHERE field5='Y' || field6='Y'
|
| |
|
|
|
|
|
|
|
для: dimaxz
(10.01.2012 в 14:01)
| | снова это ощущение удара лопаты по затылку :)
я вам не сочувствую только лишь по причине того, что мое сочувствие вам ничем не поможет))
___
par_id
это что? | |
|
|
|
|
|
|
|
для: Valick
(10.01.2012 в 14:09)
| | - >снова это ощущение удара лопаты по затылку :)
>я вам не сочувствую только лишь по причине того, что мое сочувствие вам ничем не поможет))
>___
>par_id
>это что?
- не имеет отношение к данному вопросу | |
|
|
|
|
|
|
|
для: dimaxz
(10.01.2012 в 11:50)
| | добавил новый параметр param3 = витрина
я так понимаю витрин много, и нужно выбрать какую-то конкретную витрину Y
еще раз напишите полную структуру таблиц, и уточните из какой таблицы делаем выборку а какая содержит условие выборки
+ пример набора данных для каждой таблицы | |
|
|
|
|
|
|
|
для: Valick
(10.01.2012 в 13:35)
| | правильно,витрина может быть не обязательно в param3 может и в param4 и т.д. взависисмости от каталога | |
|
|
|
|
|
|
|
для: dimaxz
(10.01.2012 в 11:27)
| | .... | |
|
|
|