|
|
|
| Возникла такая задача: есть таблица
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, но все-таки... | |
|
|
|
|
|
|
|
для: olejek
(12.06.2008 в 17:21)
| | >Я думаю, что это нельзя реализовать с только помощью MySQL, но все-таки...
Это не требуется реализовывать с помощью MySQL. | |
|
|
|
|
|
|
|
для: Trianon
(12.06.2008 в 18:51)
| | А как все-таки можно переделать таблицу, чтобы получить такой результат? При этом мне нужно, чтобы поле "abbr" было уникальным. | |
|
|
|
|
|
|
|
для: olejek
(13.06.2008 в 13:27)
| | Вам именно средствами MySQL необходимо получить результат или результат из таблицы можно "доработать" средствами PHP (которые больше подходят для решения таких задач)? | |
|
|
|
|
|
|
|
для: 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. Изврат на совести автора вопроса. | |
|
|
|
|
|
|
|
для: Trianon
(13.06.2008 в 14:15)
| | Я раньше так и делал средствами php.
Но понадобилось составить такой запрос, который бы много раз использовал приведенный вами код php, поэтому хотелось добиться этого с помощью одного запроса в MySQL.
То, что Вы предложили - просто супер!! Я бы никогда до такого не додумался! И я думаю, что в моем случае это не изврат, т.к. сэкономит количество запросов к базе данных.
Спасибо большое за помощь! | |
|
|
|
|
|
|
|
для: olejek
(13.06.2008 в 16:46)
| | я так и не понял, какой из вариантов Вас устроил...
Запрос - что в первом, что во втором случае - один. Где экономия?... | |
|
|
|
|
|
|
|
для: olejek
(13.06.2008 в 16:46)
| | Просто нужно ещё подчеркнуть, что основная нагрузка в современных Web-серверах, как правило, создаётся MySQL, причем тем больше, чем больше многотабличность запроса (особенно, если таблицы имеют большой объём). | |
|
|
|