Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Название поля в выборке
 
 автор: dimaxz   (10.01.2012 в 11:27)   письмо автору
 
 

Есть запрос:


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'


  Ответить  
 
 автор: Valick   (10.01.2012 в 11:40)   письмо автору
 
   для: dimaxz   (10.01.2012 в 11:27)
 

объясните как так получилось что название поля запихнули в другое поле?
с чем это связано и какие цели преследовались?
скорее всего база данных организована неверно

  Ответить  
 
 автор: dimaxz   (10.01.2012 в 11:50)   письмо автору
 
   для: 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:51)   письмо автору
 
   для: dimaxz   (10.01.2012 в 11:50)
 

пытаюсь мудрить с переменными но пока без успешно

  Ответить  
 
 автор: Valick   (10.01.2012 в 12:23)   письмо автору
 
   для: dimaxz   (10.01.2012 в 11:50)
 

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

  Ответить  
 
 автор: dimaxz   (10.01.2012 в 12:30)   письмо автору
 
   для: Valick   (10.01.2012 в 12:23)
 

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

  Ответить  
 
 автор: dimaxz   (10.01.2012 в 12:35)   письмо автору
 
   для: dimaxz   (10.01.2012 в 12:30)
 

может быть как то через execute ?

  Ответить  
 
 автор: Valick   (10.01.2012 в 12:56)   письмо автору
 
   для: dimaxz   (10.01.2012 в 12:30)
 

я то как раз вас хорошо понял(причем с первого поста, а дополнительный вопрос задавал на всякий случай), а вот вы меня нет
вы штангу в 50 кг поднимите?
а в 200кг?
всего-лишь 150кг разницы....
но вы же ее не поднимите, только по причине того что "ну очень нужно"
____
стало жутко интересно посмотреть хотя бы пару примеров запросов к такой структуре бд

  Ответить  
 
 автор: Lotanaen   (10.01.2012 в 12:56)   письмо автору
 
   для: dimaxz   (10.01.2012 в 11:50)
 

10 параметров может быть в поле филд_нэйм или не ограничено? и можно запрос полный посмотреть как Вы до возникшей проблемы делали?

  Ответить  
 
 автор: Valick   (10.01.2012 в 12:58)   письмо автору
 
   для: Lotanaen   (10.01.2012 в 12:56)
 

а смысл в этих неограниченных параметрах, если реально всего 10 полей, имена которых и есть эти параметры данного поля

  Ответить  
 
 автор: Lotanaen   (10.01.2012 в 13:06)   письмо автору
 
   для: Valick   (10.01.2012 в 12:58)
 

а для чего вообще это поле filter_name? не совсем понятно...
я так полагаю что запрос тогда нужно делать такого вида примерно :


select id,name,vitrina,image,filter_name
from data
WHERE  filter_name='vitrina' AND  vitrina = 'Y'

  Ответить  
 
 автор: dimaxz   (10.01.2012 в 14:01)   письмо автору
 
   для: Valick   (10.01.2012 в 12:58)
 

детали могут принадлежать к разным каталогам, в разных каталогах свой набор доп. параметров деталей, если в каталоге 1 сведение о витрине содержится в поле field_2 то в каталоге 2 в поле field_3

  Ответить  
 
 автор: dimaxz   (10.01.2012 в 14:06)   письмо автору
 
   для: 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'

  Ответить  
 
 автор: Valick   (10.01.2012 в 14:09)   письмо автору
 
   для: dimaxz   (10.01.2012 в 14:01)
 

снова это ощущение удара лопаты по затылку :)
я вам не сочувствую только лишь по причине того, что мое сочувствие вам ничем не поможет))
___
par_id
это что?

  Ответить  
 
 автор: dimaxz   (10.01.2012 в 14:18)   письмо автору
 
   для: Valick   (10.01.2012 в 14:09)
 

- >снова это ощущение удара лопаты по затылку :)
>я вам не сочувствую только лишь по причине того, что мое сочувствие вам ничем не поможет))
>___
>par_id
>это что?

- не имеет отношение к данному вопросу

  Ответить  
 
 автор: Valick   (10.01.2012 в 13:35)   письмо автору
 
   для: dimaxz   (10.01.2012 в 11:50)
 

добавил новый параметр param3 = витрина
я так понимаю витрин много, и нужно выбрать какую-то конкретную витрину Y
еще раз напишите полную структуру таблиц, и уточните из какой таблицы делаем выборку а какая содержит условие выборки
+ пример набора данных для каждой таблицы

  Ответить  
 
 автор: dimaxz   (10.01.2012 в 14:16)   письмо автору
 
   для: Valick   (10.01.2012 в 13:35)
 

правильно,витрина может быть не обязательно в param3 может и в param4 и т.д. взависисмости от каталога

  Ответить  
 
 автор: Lotanaen   (10.01.2012 в 11:40)   письмо автору
 
   для: dimaxz   (10.01.2012 в 11:27)
 

....

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования