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

Форум MySQL

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

 

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

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

тема: Выбрать записи столько раз, сколько указано в поле
 
 автор: olejek   (12.06.2008 в 17:21)   письмо автору
 
 

Возникла такая задача: есть таблица

CREATE TABLE `stud_group` (
 `id_group` int(5) NOT NULL auto_increment,
 `abbr` char(10) NOT NULL,
 `sub_group` tinyint(4) default NULL,
 PRIMARY KEY  (`id_group`) 
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8


Нужно сделать такой запрос, чтобы записи выбирались столько раз, какое число стоит в поле `sub_group`.

Например, таблица содержит строки:
id_group abbr sub_group
1 aa NULL
2 bb 2
3 cc 3

Тогда запрос должен вернуть строки:
abbr + sub_group
aa
bb1
bb2
сс1
сс2
сс3

Я думаю, что это нельзя реализовать с только помощью MySQL, но все-таки...

   
 
 автор: Trianon   (12.06.2008 в 18:51)   письмо автору
 
   для: olejek   (12.06.2008 в 17:21)
 

>Я думаю, что это нельзя реализовать с только помощью MySQL, но все-таки...

Это не требуется реализовывать с помощью MySQL.

   
 
 автор: olejek   (13.06.2008 в 13:27)   письмо автору
 
   для: Trianon   (12.06.2008 в 18:51)
 

А как все-таки можно переделать таблицу, чтобы получить такой результат? При этом мне нужно, чтобы поле "abbr" было уникальным.

   
 
 автор: cheops   (13.06.2008 в 13:58)   письмо автору
 
   для: olejek   (13.06.2008 в 13:27)
 

Вам именно средствами MySQL необходимо получить результат или результат из таблицы можно "доработать" средствами PHP (которые больше подходят для решения таких задач)?

   
 
 автор: Trianon   (13.06.2008 в 14:15)   письмо автору
 
   для: olejek   (13.06.2008 в 13:27)
 

<?$sql 'SELECT * FROM stud_group';
$res mysql_query($sql);
$result = array();
while(
$row mysql_fetch_assoc($res))
{
    for(
$i 1$lim intval($row['sub_group']), $prefix $row['abbr']); $i <= $lim$i++)
        
$result[] = $prefix $i;
    if(
$i == 0$result[] = $prefix;
}


Если Вам до зарезу нужно это вытащить именно запросом, создайте таблицу seq с одним автоинкрементным столбиком id и числом строк, равным максимальному значению sub_group.
SELECT CONCAT(abbr, COALESCE(seq.id, '') AS res 
FROM stud_group LEFT JOIN seq ON seq.id <= sub_group


PS. Изврат на совести автора вопроса.

   
 
 автор: olejek   (13.06.2008 в 16:46)   письмо автору
 
   для: Trianon   (13.06.2008 в 14:15)
 

Я раньше так и делал средствами php.
Но понадобилось составить такой запрос, который бы много раз использовал приведенный вами код php, поэтому хотелось добиться этого с помощью одного запроса в MySQL.
То, что Вы предложили - просто супер!! Я бы никогда до такого не додумался! И я думаю, что в моем случае это не изврат, т.к. сэкономит количество запросов к базе данных.
Спасибо большое за помощь!

   
 
 автор: Trianon   (13.06.2008 в 20:01)   письмо автору
 
   для: olejek   (13.06.2008 в 16:46)
 

я так и не понял, какой из вариантов Вас устроил...
Запрос - что в первом, что во втором случае - один. Где экономия?...

   
 
 автор: cheops   (13.06.2008 в 20:21)   письмо автору
 
   для: olejek   (13.06.2008 в 16:46)
 

Просто нужно ещё подчеркнуть, что основная нагрузка в современных Web-серверах, как правило, создаётся MySQL, причем тем больше, чем больше многотабличность запроса (особенно, если таблицы имеют большой объём).

   
Rambler's Top100
вверх

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