PHP уроки для начинающих

PHP уроки

  • Главная
  • PHP с чего начать?
  • Уроки PHP
  • Массивы
  • Функции
  • MySQL
  • Форум
Меню

  • PHP - с чего начать?
  • Уроки PHP
  • Функции
  • Массивы
  • Denwer
  • MySQL
  • Информация
  • Dreamweaver уроки
  • Галерея
  • Как здесь качать?
  • КНИГИ

Связаны

  • Познавательный Отдых Отдых В Италии И Не Только.

Что нового?
Как создать свой сайт? Урок третий.
Загрузка файлов
Регистрация PHP
Как создать свой сайт? Урок второй.
Как создать свой сайт?
Размер изображения
Index.php

Новости на email
Подпишись на новости.
Уроки PHP на email.


Имя(login):

*Ваш email:


Календарь
Май (2012)
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031   

ИГРЫ Компьютерные, настольные, детские конструкторы, карточные игры, головоломки.
on-books.ru
 
Комментарии
Текст
сообщениясбрасы
ваются все
настройки
мозилы+удаляютс
я в...
"Сейчас
откройте
страничку в
браузере. Для
этого щёлкни...
Спасибо за
уроки
спосиба для
помщ
Читать учитесь.
 
TOP5-уроки
1.  Привет, МИР! - 62109
2.  Метод GET - 35587
3.  Как вставить картинку в скрипт PHP. - 33564
4.  Как настроить Adobe Dreamweaver для работы с сайтом. - 29801
5.  Метод POST - 29176

Как выбрать все товары из базы данных, принадлежащие одной категории?

Главная » MySQL » Как выбрать все товары из базы данных, принадлежащие одной категории?

PHP урок № 264

Выборка данных из MySQL

Условие:
1. есть товары: скакалки, гантели, боксерские перчатки, штанги, велотренажеры, капы, футбольные мячи и т.д.
2. есть категории: фитнес, бокс, велоспорт, футбол, мячи и сетки и т.д.
3. Некоторые товары принадлежат сразу к нескольким категориям (футбольный мяч принадлежит к категории "футбол" и к категории "мячи и сетки").
Вопрос:
Как сделать так, чтобы при выборе категории товаров на странице выводились все товары? Т.е. меня интересует что для этого нужно сделать? Каким образом (по какому принципу) создавать таблицы в БД? Как объединять (нужно ли объединять)? Как сформулировать запрос в БД?
Ответ:
Немного о сущностях, так называются объекты которые помещаются в базу данных в виде таблиц. Объект это существительное. Это люди, местность, событие, предмет, всё то о чём вы будете хранить данные в БД. Для того чтобы определить объект для базы данных, попробуйте ответить на два вопроса:
  1. Их больше одного? Вы можете представить больше одного представителя данного объекта?
  2. Он изменяется со временем? Кол-во членов растёт или уменьшается? Кол-во посещений меняется со временем?
Если ответ положительный, следует создать для этого объекта отдельную таблицу в базе данных.
По условию задачи мы имеем несколько категорий и несколько товаров. Все категории можно объединить в одну таблицу categors. C товарами немного посложнее каждый товар по сути есть сущность, мяч может быть не только не один в прайсе, но и разновидность мячей так же имеет место быть. Поэтому для сущности мяч, создаём отдельную таблицу machs, в которую и будем помещать все мячи (волейбольные, баскетбольные, футбольные). К тому же по условию задачи, мяч может принадлежать к разным категориям. Для этого сделаем ассоциативную таблицу, между связью categors и machs. Назовём её tovars.
Я не буду сейчас расписывать все категории. Думаю и так понятно по аналогии, как создать для каждого товара, который будет встречаться в разных категориях, дополнительные таблицы. Возьмём пример ещё одного товара, который не входит в несколько категорий, пусть это будет товар сетки, Создаём для этой сущности таблицу setkas. В результате всего выше изложенного у нас получилось четыре таблицы. Ниже представлена ER-диаграмма.
Рис. 1

Листинг № 1 - Дамп БД

-- --------------------------------------------------------

--
-- Структура таблицы `categors`
--

CREATE TABLE `categors` (
`id_categor` int(4) unsigned NOT NULL auto_increment,
`categor` varchar(30) NOT NULL,
PRIMARY KEY (`id_categor`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;

--
-- Дамп данных таблицы `categors`
--

INSERT INTO `categors` VALUES (1, 'footbol');
INSERT INTO `categors` VALUES (2, 'bool_and_setka');
INSERT INTO `categors` VALUES (3, 'fitnes');
INSERT INTO `categors` VALUES (4, 'boks');

-- --------------------------------------------------------

--
-- Структура таблицы `machs`
--

CREATE TABLE `machs` (
`id_mach` int(6) unsigned NOT NULL auto_increment,
`mach` varchar(20) NOT NULL,
`razm` varchar(30) NOT NULL,
PRIMARY KEY (`id_mach`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=cp1251 COMMENT='мячи ' AUTO_INCREMENT=4 ;

--
-- Дамп данных таблицы `machs`
--

INSERT INTO `machs` VALUES (1, 'mach_footbol', '5');
INSERT INTO `machs` VALUES (2, 'mach_basketbool', '8');
INSERT INTO `machs` VALUES (3, 'mach_regby', '12');

-- --------------------------------------------------------

--
-- Структура таблицы `setkas`
--

CREATE TABLE `setkas` (
`id_setka` int(5) unsigned NOT NULL auto_increment,
`setka` varchar(25) NOT NULL,
`razm` varchar(25) NOT NULL,
`id_categor` int(5) NOT NULL,
PRIMARY KEY (`id_setka`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=cp1251 COMMENT='сетки' AUTO_INCREMENT=4 ;

--
-- Дамп данных таблицы `setkas`
--

INSERT INTO `setkas` VALUES (1, 'setka_volbol', '122', 2);
INSERT INTO `setkas` VALUES (2, 'setka_tenis', '18', 3);
INSERT INTO `setkas` VALUES (3, 'setka_footbol', '220', 1);

-- --------------------------------------------------------

--
-- Структура таблицы `tovars`
--

CREATE TABLE `tovars` (
`id_mach` int(5) NOT NULL,
`id_categor` int(5) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

--
-- Дамп данных таблицы `tovars`
--

INSERT INTO `tovars` VALUES (1, 2);
INSERT INTO `tovars` VALUES (1, 1);

Листинг № 2 - Выборка всех товаров по категории.

<?php 

// ID запрашиваемой категории
$id_categor = 1;

$r = mysql_query("SELECT * FROM  categors, setkas, tovars, 
                 machs WHERE categors.id_categor = '"
.
                 
$id_categor."' AND setkas.id_categor = '".
                 
$id_categor."' AND tovars.id_categor = '".
                 
$id_categor."' AND tovars.id_mach = machs.id_mach");

if(!
$r)exit(mysql_error());

while(
$t = mysql_fetch_array($r))
{
      echo 
"<strong>Товар по категории ". $t['categor'].
    
" :</strong> <br>" .
     
$t['mach'].";<br> " .$t['setka'].";<br>";
}

?>
В листинге №2, переменная $id_categor принимает значение 1, при этом выводятся товары принадлежащие к категории footbol, mach_footbol присутствует в двух категориях. Поменяйте значение переменной на 2, это категория bool_and_setka в БД. Здесь вы так же увидите футбольный мяч.

Урок закончен.

SETTER © LPHP.RU
Администрация сайта
04.01.2010 04:53:04

Обсудить на форуме.

Рекомендованные уроки этого раздела:
  • Как выбрать все товары из базы данных, принадлежащие одной категории?
  • Как закинуть большой файл sql в базу данных?
  • Дамп (dump) MySQL
  • Как установить сервер MySQL (видео)

НАПИШИТЕ СВОЙ КОММЕНТАРИЙ

Имя:

Введите цифры с картинки:

Нет сообщений.

Copyright © 2009-2012 LPHP.RU