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

Форум PHP

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

 

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

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

тема: Объединить в строку и в селект
 
 автор: gofree   (26.10.2014 в 20:36)   письмо автору
 
 

здравствуйте, в базе содержатся записи в двух простых таблицах.rnПервая. rn
CREATE TABLE IF NOT EXISTS `a` (rn  `id` int(4) NOT NULL AUTO_INCREMENT,rn  `description` varchar(100) NOT NULL,rn  `type` varchar(100) NOT NULL,rn  PRIMARY KEY (`id`)rn) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;rnrnINSERT INTO `a` (`id`, `description`, `type`) VALUESrn(1, 'Кол-во клапанов', '12v'),rn(2, 'Кол-во клапанов', '24v'),rn(3, 'Система зажигания', 'Трамблер'),rn(4, 'Система зажигания', 'Катушка'),rn(5, 'Кол-во распредвалов', 'SOHC'),rn(6, 'Кол-во распредвалов', 'DOHC');
rnrnВтораяrnrn
CREATE TABLE IF NOT EXISTS `b` (rn  `id` int(4) NOT NULL AUTO_INCREMENT,rn  `type_id` varchar(255) NOT NULL,rn  `engine` varchar(100) NOT NULL,rn  `modif` varchar(100) NOT NULL,rn  PRIMARY KEY (`id`)rn) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8;rnrnINSERT INTO `b` (`id`, `type_id`, `engine`, `modif`) VALUESrn(1, '1', '6G72', '1'),rn(2, '1', '6G72', '3'),rn(3, '1', '6G72', '5'),rn(5, '2', '6G72', '2'),rn(6, '2', '6G72', '4'),rn(7, '2', '6G72', '6');rn
rnrnНужно вывести информацию в селекте вида rn
<select>rn<option>12v : трамблер : SOHC</option>rn<option>24v : катушка : DOHC</option>rn</select>
rnrnКак я понимаю тут поможет group_concat?rnПишу с планшета, накидал запрос, поправьте пожалуйста...rn
rn$sql = "SELECT GROUP_CONCAT(DISTINCT b.type_id ORDER by b.type_id ASC SEPARATOR ' : ')  AS types, a.id, a.typern            FROM arn            LEFT JOIN b ON a.id = b.modif";rnrn

  Ответить  
 
 автор: gOFREe   (26.10.2014 в 20:39)   письмо автору
 
   для: gofree   (26.10.2014 в 20:36)
 

Что то форум наковеркал... Извините исправить в данный момент не могу...

  Ответить  
 
 автор: Trianon   (26.10.2014 в 21:18)   письмо автору
 
   для: gofree   (26.10.2014 в 20:36)
 

То, что движок при каждом чихе
( в данном случае - попытка написать пост от своего имени, но без введенного пароля)
меняет перевод строки на пару 'rn', изрядно бесит деморализует.

----------- Это было в исходном посте --------

здравствуйте, в базе содержатся записи в двух простых таблицах.
Первая.
CREATE TABLE IF NOT EXISTS `a` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `description` varchar(100) NOT NULL,
  `type` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

INSERT INTO `a` (`id`, `description`, `type`) VALUES
(1, 'Кол-во клапанов', '12v'),
(2, 'Кол-во клапанов', '24v'),
(3, 'Система зажигания', 'Трамблер'),
(4, 'Система зажигания', 'Катушка'),
(5, 'Кол-во распредвалов', 'SOHC'),
(6, 'Кол-во распредвалов', 'DOHC');


Вторая

CREATE TABLE IF NOT EXISTS `b` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `type_id` varchar(255) NOT NULL,
  `engine` varchar(100) NOT NULL,
  `modif` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8;

INSERT INTO `b` (`id`, `type_id`, `engine`, `modif`) VALUES
(1, '1', '6G72', '1'),
(2, '1', '6G72', '3'),
(3, '1', '6G72', '5'),
(5, '2', '6G72', '2'),
(6, '2', '6G72', '4'),
(7, '2', '6G72', '6');


Нужно вывести информацию в селекте вида
<select>
<option>12v : трамблер : SOHC</option>
<option>24v : катушка : DOHC</option>
</select>


Как я понимаю тут поможет group_concat?
Пишу с планшета, накидал запрос, поправьте пожалуйста...

$sql = "SELECT GROUP_CONCAT(DISTINCT b.type_id ORDER by b.type_id ASC SEPARATOR ' : ')  AS types, a.id, a.type
            FROM a
            LEFT JOIN b ON a.id = b.modif";

  Ответить  
 
 автор: Trianon   (26.10.2014 в 21:32)   письмо автору
 
   для: gofree   (26.10.2014 в 20:36)
 

по сути.

Схема далека от нормальной формы.

Применять группирующую агрегатную функцию GROUP_CONCAT без GROUP BY
в принципе можно, но окажется сцеплена вся таблица в одну строку.
Это же не то, что ожидается?

Левое внешнее соединение здесь как-то совсем против ветра.
Сложно группировать строки по NULL полям.

Поле engine осталось за бортом, т.к. не содержит различий.

И еще, не очень понял, если a.id = b.modif , то почему у них разные типы?

В целом:

SELECT GROUP_CONCAT(a.type ORDER BY b.id ASC SEPARATOR ' : ')  AS types, b.type_id
  FROM a
     JOIN b ON a.id = b.modif
  GROUP BY b.type_id
  ORDER BY  b.type_id

  Ответить  
 
 автор: gofree   (26.10.2014 в 21:59)   письмо автору
 
   для: Trianon   (26.10.2014 в 21:32)
 

Спасибо, ошибки понял, буду тренироваться.

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

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