PHP и с чем его едят....

[fly]

Sweet orange
продукт относится к подкатегории, а подкатегория к категории
Так и есть. И я хочу указать ID категории и занести ее вместе с ID подкатегории в таблицу с товаром для того, чтобы этот товар можно было вывести не только из подкатегории, но и если выбрать категорию, скажем, мобильные телефоны - выводит все самсунги, нокии и все остальные мобильные телефоны. Конечно можно было бы в обработчике по ID подкатегории взять ID самой категории, но не хочется делать еще один запрос к базе. Не то чтобы их у меня много, просто если есть способ избежать запроса - то стараюсь так и делать. И скажите, как в этом случае нарушается целостность базы?
 

Dre.hz

Active Member
Можно увидеть структуру БД с таблицами продуктов, категорий и подкатегорий?
 

[fly]

Sweet orange
Это не тайна:) Я ведь только учусь.

Структура таблицы с продуктами:

You must be registered for see images


Тут вроде все понятно, кроме:
file_nameOwner - название главной картинки товара;
seoNameProduct - ЧПУ;
partProduct - артикул товара;
attachProduct - флажок, который показывает, есть ли сопутствующий товар или нет;

Структура таблицы подкатегорий:

You must be registered for see images


В этой таблице:
podCategoryId - ID родительской категории;

Структура таблицы с категориями:

You must be registered for see images


Тут вроде все понятно.
 

Вкладення

Dre.hz

Active Member
Ок, тогда по порядку.

1. Как нарушить целостность данных в этой БД.
Редактируем Кефир, сохраняем его со значениями Химия > Молочные.
Тогда в таблице продуктов кефиру будет соответствовать пара Химия > Молочные, а в таблицах категорий будет пара Продукты > Молочные, а значит данные в БД противоречат самим себе.

2. Как нужно, Lite-версия.
Нужно просто убрать поле idCategoryProduct. Если нужно вывести все продукты из категории, то просто запросом типа:
Код:
SELECT p.* FROM products p, categories c, subcategories s WHERE c.idCategory=123 AND c.idCategory = s.idCategory AND s.idPodCategory = p.idPodCategory
3. Как нужно, расширенная версия, за что лично я бью по рукам.
- Если называете поля в lowerCamelCase, то называте все поля так. касается fileNameOwner.
- из названий полей можно смело убрать название таблицы. Нет смысла его повторять. Если хочетяс использовать его в запросах для наглядности, можно писать `categories.name`.
- Если названия полей на английском, то нужно заглянуть в словарь и перевести неизвестные слова. Касается idPodCategory -> idSubCategory
- Собственно, категории и подкатегории это одно и то же. У них даже таблицы одинаковые. Нет смысла хранить их в двух таблицах - должна быть одна. В ней будет поле типа parent, где будет указан ID родительской категории. В запросе таблицу можно джоинить саму с собой.
 

[fly]

Sweet orange
1. Как нарушить целостность данных в этой БД.
Редактируем Кефир, сохраняем его со значениями Химия > Молочные.
Тогда в таблице продуктов кефиру будет соответствовать пара Химия > Молочные, а в таблицах категорий будет пара Продукты > Молочные, а значит данные в БД противоречат самим себе.
Так, при редактировании товара, нет возможности сменить категорию - только подкатегорию. Подробнее:

Мобильные телефоны
Самсунг
Нокиа
Филипс

Видеокамеры
Панасоник
Сони

Фотоаппараты
Кенон
Олимпус


Товар можно перемещать только по красным пунктам. Нет возможности задать например:
Мобильные телефоны
Олимпус

Или я снова не верно понял.

- Если называете поля в lowerCamelCase, то называте все поля так. касается fileNameOwner.
- из названий полей можно смело убрать название таблицы. Нет смысла его повторять. Если хочетяс использовать его в запросах для наглядности, можно писать `categories.name`.
- Если названия полей на английском, то нужно заглянуть в словарь и перевести неизвестные слова. Касается idPodCategory -> idSubCategory
За это спасибо, сам понимаю, что как-то не доделано выходит. На счет названия полей - это для меня как идентификатор. Я сразу вижу откуда данные.

- Собственно, категории и подкатегории это одно и то же. У них даже таблицы одинаковые. Нет смысла хранить их в двух таблицах - должна быть одна. В ней будет поле типа parent, где будет указан ID родительской категории. В запросе таблицу можно джоинить саму с собой.
Тут не понял. У меня ведь есть кроме ID еще данные отдельно и для категорий и подкатегорий. Что это значит:
В запросе таблицу можно джоинить саму с собой.
Спасибо, что принимаете участие в моем развитии.
 

Dre.hz

Active Member
Так, при редактировании товара, нет возможности сменить категорию - только подкатегорию.
Тогда зачем передавать ID категории? Все это вертится вокруг этого вопроса - зачем _передавать_ ID категории со страницы редактирования?

По поводу категорий и субкатегорий в одной таблице. Сделал локально, скриншоты прилагаю.
1. Структура
2. Данные
3. Пример запроса

Делал на скоруюу руку, кодировка какая-то неадекватная стоит там... Должно быть utf8_general_ci
 

Вкладення

[fly]

Sweet orange
Тогда зачем передавать ID категории? Все это вертится вокруг этого вопроса - зачем _передавать_ ID категории со страницы редактирования?
Все верно. А ID категории для того, чтобы было проще (на мой взгляд) выводить товар кликнув на саму категорию. Без разбивки на подкатегории, а общим скопом.
 
Останнє редагування:

[fly]

Sweet orange
В общем буду изучать скрины. Как-то для меня это запутано получилось. Еще раз спасибо!
 

life-

Нафиг отвлекалово!
Есть вопросик. Возможно ли написать скрипт, который будет выполнять POST/GET запросы (как через curl), только IP адрес отправителя будет использоваться от клиента? То есть клиент должен делать запрос, а не сервер. Такое возможно?
 
Зверху