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

Форум MySQL

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

 

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

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

тема: Архитектура таблиц как в битриксе
 
 автор: dimaxz   (18.02.2010 в 08:12)   письмо автору
 
 

Здравсвуйте господа. Работал с битриксом и мне понравилась идея инфоблоков.
Тема такая что в одной таблице хранятся эллементы с стандартным набором полей: например ид, дата создания, имя, описание и тд.
В другой перечень доп. полей например относящиеся к определеному инф.блоку.
В третьей список значений доп. полей относящиеся к определенному эллементу и полю.
Хотелось бы знать каким образом можно вытащить эллементы из первой при этом узнать список доп. полей и из ходя из этого вытащить значения полей из третьей В ОДНОМ ЗАПРОСЕ.???
пока на ум пришло решение в два запроса:1. узнаем список доп. полей из 2-й табл..2 констуируем запрос и выбираем значения из 1-ой и 3-й.

  Ответить  
 
 автор: Trianon   (18.02.2010 в 08:22)   письмо автору
 
   для: dimaxz   (18.02.2010 в 08:12)
 

структуру таблиц (дамп) приведите, пожалуйста.
И начальные данные запроса.

  Ответить  
 
 автор: dimaxz   (18.02.2010 в 08:51)   письмо автору
 
   для: Trianon   (18.02.2010 в 08:22)
 

таблица iblock (Список инфо блоков)

id | name
1 | Новости
2 | Товары

таблица ellement (список эллементов)

id | iblock_id | name | data_create | text
1 | 1 | Новость дня | 10-10-2010 | подроб текст..
2 | 1 | Новость еще | 05-10-2010 | подробно..
3 | 2 | Заколка | 01-11-2010 | описание товара

Таблица fields список доп. полей

id | iblock_id | code | name | type
1 | 1 | editor | Редактор | INT
2 | 2 | price | Цена | INT
3 | 2 | art | Артикул | TEXT

Таблица preperties значений полей (22-Иванов, 23-Петров)

id | ellement_id | field_id | value_int | value_text
1 | 1 | 1 | 22 | NULL
2 | 2 | 1 | 23 | NULL
3 | 3 | 2 | 240 | NULL
4 | 3 | 3 | NULL | AR25-JH

  Ответить  
 
 автор: dimaxz   (18.02.2010 в 08:56)   письмо автору
 
   для: Trianon   (18.02.2010 в 08:22)
 

думаю тема понятна, используя в арсенале всего эти таблицы можно реализовывать новые элементы без создания таблиц, универсальность!

  Ответить  
 
 автор: Trianon   (18.02.2010 в 09:05)   письмо автору
 
   для: dimaxz   (18.02.2010 в 08:56)
 

Вы знаете, что такое дамп?
Дамп это когда show create table (и далее несколько слов без падежей)

  Ответить  
 
 автор: dimaxz   (18.02.2010 в 10:41)   письмо автору
 
   для: Trianon   (18.02.2010 в 09:05)
 

а так нельзя? (

  Ответить  
 
 автор: TrianoN   (18.02.2010 в 11:03)   письмо автору
 
   для: dimaxz   (18.02.2010 в 10:41)
 

Другими словами, вместо того, чтобы предоставить естественную возможность Вашу проблему порешать - создать таблицы и попробовать запросы, Вы предлагаете лишь посмотреть на картинку умозрительно?

Посмотрел. Вы довольны?

  Ответить  
 
 автор: dimaxz   (18.02.2010 в 11:43)   письмо автору
 
   для: TrianoN   (18.02.2010 в 11:03)
 


CREATE TABLE pz2.pz_iblock_copy(
  id INT (11) NOT NULL AUTO_INCREMENT,
  NAME VARCHAR (255) DEFAULT NULL,
  `COMMENT` VARCHAR (255) DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = MYISAM
AUTO_INCREMENT = 3
CHARACTER SET cp1251
COLLATE cp1251_general_ci;


CREATE TABLE pz2.pz_iblock_element_copy(
  iblock_element_id INT (11) NOT NULL AUTO_INCREMENT,
  date_create DATETIME DEFAULT NULL,
  created_by INT (11) DEFAULT NULL,
  iblock_id INT (11) NOT NULL DEFAULT 1,
  name VARCHAR (255) DEFAULT NULL,
  detail_text LONGTEXT DEFAULT NULL,
  PRIMARY KEY (iblock_element_id)
)
ENGINE = MYISAM
AUTO_INCREMENT = 12
CHARACTER SET cp1251
COLLATE cp1251_general_ci;



CREATE TABLE pz2.pz_iblock_field_copy(
  id INT (11) NOT NULL AUTO_INCREMENT,
  iblock_id INT (11) DEFAULT NULL,
  code VARCHAR (50) DEFAULT NULL,
  name VARCHAR (100) DEFAULT NULL,
  type INT (11) DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = MYISAM
AUTO_INCREMENT = 5
CHARACTER SET cp1251
COLLATE cp1251_general_ci;



CREATE TABLE pz2.pz_iblock_element_property_copy(
  id INT (11) NOT NULL AUTO_INCREMENT,
  element_id INT (11) DEFAULT NULL,
  field_id INT (11) DEFAULT NULL,
  value_int INT (11) DEFAULT NULL,
  value_text TEXT DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = MYISAM
AUTO_INCREMENT = 1
CHARACTER SET cp1251
COLLATE cp1251_general_ci;

  Ответить  
 
 автор: Trianon   (18.02.2010 в 13:43)   письмо автору
 
   для: dimaxz   (18.02.2010 в 11:43)
 

Как-то не видно, зачем бы здесь именно один запрос...
А так, как Вы описали - поля одним, свойства и значения - другим, вполне себе.
Странно, правда, что чужие ключи допускают неопределенные значения (NULL)
element_id INT (11) DEFAULT NULL,
field_id INT (11) DEFAULT NULL,
но, возможно, это для задания умолчаний...

  Ответить  
 
 автор: dimaxz   (18.02.2010 в 13:50)   письмо автору
 
   для: Trianon   (18.02.2010 в 13:43)
 

цель одна вывести данные из таблицы elements с учетом определенного инфоблока (пример Товары )только прицепом надо захватить еще и поля из таблицы element_property

должно получится:

3| Заколка|01-11-2010|описание товара|240 | AR25-JH

  Ответить  
 
 автор: dimaxz   (19.02.2010 в 07:53)   письмо автору
 
   для: dimaxz   (18.02.2010 в 13:50)
 

ответа на вопрос так и не получил

  Ответить  
 
 автор: Trianon   (19.02.2010 в 10:02)   письмо автору
 
   для: dimaxz   (19.02.2010 в 07:53)
 

так еще дамп данных неплохо было бы привести.
На чем запросы-то проверять?
И входящие параметры . Номер блока = 2 ?

  Ответить  
 
 автор: dimaxz   (19.02.2010 в 15:40)   письмо автору
 
   для: Trianon   (19.02.2010 в 10:02)
 

для iblock_copy

INSERT INTO pz_iblock_copy VALUES (1, 'Задачи', 'тип задачи');
INSERT INTO pz_iblock_copy VALUES (2, 'Шаблоны', 'здесь все шаблоны');

  Ответить  
 
 автор: dimaxz   (19.02.2010 в 15:43)   письмо автору
 
   для: Trianon   (19.02.2010 в 10:02)
 

для iblock_element

INSERT INTO pz_iblock_element_copy VALUES (1, '2010-02-05 00:00:00', 4, 1, 'Проверка', 'текст');
INSERT INTO pz_iblock_element_copy VALUES (11, '0001-01-17 00:00:00', 4, 2, 'Шаблон1', NULL);

  Ответить  
 
 автор: dimaxz   (19.02.2010 в 15:49)   письмо автору
 
   для: Trianon   (19.02.2010 в 10:02)
 

список полей инф. блока

INSERT INTO pz_iblock_field_copy VALUES (1, 1, 'opisanie', 'Описание', 1);
INSERT INTO pz_iblock_field_copy VALUES (2, 1, 'avtor', 'Автор', 2);
INSERT INTO pz_iblock_field_copy VALUES (3, 1, 'comment', 'Комментарий', 1);
INSERT INTO pz_iblock_field_copy VALUES (4, 2, 'img', 'Фото', 1);

  Ответить  
 
 автор: dimaxz   (19.02.2010 в 15:56)   письмо автору
 
   для: Trianon   (19.02.2010 в 10:02)
 

Таблица доп полей эллементов

INSERT INTO pz_iblock_element_property_copy VALUES (1, 1, 1, NULL,'описание');
INSERT INTO pz_iblock_element_property_copy VALUES (2, 1, 2, 10, NULL);
INSERT INTO pz_iblock_element_property_copy VALUES (3, 1, 3, NULL, 'еще текст');

  Ответить  
 
 автор: dimaxz   (24.02.2010 в 09:08)   письмо автору
 
   для: Trianon   (19.02.2010 в 10:02)
 

тема актуальна

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

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