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

Форум MySQL

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

 

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

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

тема: Вложенный запрос
 
 автор: TetRiska   (22.02.2011 в 17:23)   письмо автору
 
 

Всем привет. нужна Ваша помощь в создание такого запроса.

Начало:
SELECT DISTINCT
                em_category_id,em_category_name
            FROM
                em_category c
            JOIN
                em_business_group b ON(b.em_business_group_category=c.em_category_id)
            WHERE
                b.em_company_id=2137
            ORDER BY em_category_name

Выводит:
189     ATV - техника
2722    Авиа перевозка грузов
2742    Авто перевозка грузов
2743    Авто перевозка пассажиров
111     Автобусы
192     Автодома
5339    Аква перевозка грузов
5340    Аква перевозка пассажиров
302     Аквабайки - гидроциклы
188     Багги, картинги
197     Инструмент общего назначения
2727    Ремонт - водный транспорт
3538    Ремонт - грузовые автомобили


Вывод неверен, т.к. не учтено, что в этих категориях нет как таковых субкатегорий, т.е. должно вывести всего лишь 2 записи. Таблица em_business_group связана по полю em_company_id с таблицей субкатегорий...Т.е. сейчас нужно вложеный запрос который бы проверял категорию на наличие субкатегорий, если нет, то не выводить категорию. Прошу помощи.

  Ответить  
 
 автор: cheops   (22.02.2011 в 17:27)   письмо автору
 
   для: TetRiska   (22.02.2011 в 17:23)
 

Э... а можно привести результат, что должно вывестить?

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

  Ответить  
 
 автор: TetRiska   (22.02.2011 в 17:53)   письмо автору
 
   для: cheops   (22.02.2011 в 17:27)
 

Вывести должно:
188     Багги, картинги
3538    Ремонт - грузовые автомобили

Эти категории содержат субкатегории, поэтому и должны вывестись.

стукни 286909178 или напиши свою, сюда нежелательно выкладывать дамп + будет проще объяснить что по чем.

  Ответить  
 
 автор: cheops   (22.02.2011 в 18:07)   письмо автору
 
   для: TetRiska   (22.02.2011 в 17:53)
 

К сожалению, ICQ у меня нет, давайте так разберемся. Таблица субкатегорий у вас как называется?

  Ответить  
 
 автор: TetRiska   (22.02.2011 в 18:30)   письмо автору
 
   для: cheops   (22.02.2011 в 18:07)
 

Вот 2 таблицы субкатегорий

CREATE TABLE `em_service` (
  `em_service_id` int(10) unsigned NOT NULL auto_increment,
   ...
  `em_company_id` int(10) unsigned NOT NULL default '0',
  `em_business_group_id` int(10) unsigned NOT NULL default '0',
  ....
  PRIMARY KEY  (`em_service_id`)
) ENGINE=MyISAM AUTO_INCREMENT=156 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `em_produce` (
  `em_produce_id` int(10) unsigned NOT NULL auto_increment,
   ...
  `em_company_id` int(10) unsigned NOT NULL default '0',
  `em_business_group_id` int(10) unsigned NOT NULL default '0',
   ...
  PRIMARY KEY  (`em_produce_id`)
) ENGINE=MyISAM AUTO_INCREMENT=23615 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


Вот 2 таблицы, что объединены и которые нам дали уже результат.

CREATE TABLE `em_category` (
  `em_category_id` int(10) unsigned NOT NULL auto_increment,
   ...
  `em_category_name` varchar(64) collate utf8_unicode_ci NOT NULL default '',
   ...
  PRIMARY KEY  (`em_category_id`)
) ENGINE=MyISAM AUTO_INCREMENT=6092 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `em_business_group` (
  `em_business_group_id` int(10) unsigned NOT NULL auto_increment,
   ...
  `em_company_id` int(10) unsigned NOT NULL default '0',
   ...
  `em_business_group_category` int(10) unsigned NOT NULL default '0',
   ...
  PRIMARY KEY  (`em_business_group_id`)
) ENGINE=MyISAM AUTO_INCREMENT=18773 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


В общей сложности дело обстоит так. Чтобы выбрать нужные категории для нужной компании мы объединяем 2 таблицы: таблицу em_category и таблицу em_business_group по полю em_business_group_category таблицы em_business_group и полю em_category_id таблицы em_category. Получится некий список категорий. Но забыли учесть, что эти категории могут не содержать субкатегорий, т.е. категории некоторые пусты, т.к. небыли заполнены субкатегориями. Выше я привел таблицы субкатегорий. Их 2, т.к. субкатегории тех категорий (списка что мы получили) распределяются по двум таблицам. Вот нужно перед тем как вывести категории, сперва проверить их на наличие субкатегорий.

  Ответить  
 
 автор: TetRiska   (22.02.2011 в 19:10)   письмо автору
 
   для: TetRiska   (22.02.2011 в 18:30)
 

решили задачку _http://forum.sources.ru/index.php?showtopic=326369. всеравно спасибо :)

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

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