mysql> describe styles;
+-------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+----------------+
| id | tinyint(3) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | UNI | NULL | |
| color | varchar(7) | NO | UNI | NULL | |
+-------+---------------------+------+-----+---------+----------------+
требуется помощь составить запрос.
Суть в следующем, есть 3 таблицы, в MySQL:
В первой таблица описания стиля.
Код:
2 таблица хранит id композиции и id стиля к которому она пренадлежитэ
Код:
mysql> describe compositionInStyles;
+---------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------------+------+-----+---------+-------+
| styleId | tinyint(3) unsigned | NO | MUL | NULL | |
| compositionId | int(10) unsigned | NO | MUL | NULL | |
+---------------+---------------------+------+-----+---------+-------+
+---------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------------+------+-----+---------+-------+
| styleId | tinyint(3) unsigned | NO | MUL | NULL | |
| compositionId | int(10) unsigned | NO | MUL | NULL | |
+---------------+---------------------+------+-----+---------+-------+
Ну и 3 хранит основную инфу о музыкальной композиции, а главное ее id
Код:
mysql> describe musicComposition;
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| author | varchar(512) | NO | MUL | NULL | |
| name | varchar(512) | NO | MUL | NULL | |
| album | varchar(512) | YES | MUL | NULL | |
| yearOfAlbum | year(4) | YES | | NULL | |
| path | mediumtext | NO | | NULL | |
| mixIn | int(10) unsigned | NO | | NULL | |
| mixOut | int(10) unsigned | NO | | NULL | |
| voxIn | int(10) unsigned | NO | | NULL | |
| voxOut | int(10) unsigned | NO | | NULL | |
| md5 | char(32) | NO | UNI | NULL | |
+-------------+------------------+------+-----+---------+----------------+
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| author | varchar(512) | NO | MUL | NULL | |
| name | varchar(512) | NO | MUL | NULL | |
| album | varchar(512) | YES | MUL | NULL | |
| yearOfAlbum | year(4) | YES | | NULL | |
| path | mediumtext | NO | | NULL | |
| mixIn | int(10) unsigned | NO | | NULL | |
| mixOut | int(10) unsigned | NO | | NULL | |
| voxIn | int(10) unsigned | NO | | NULL | |
| voxOut | int(10) unsigned | NO | | NULL | |
| md5 | char(32) | NO | UNI | NULL | |
+-------------+------------------+------+-----+---------+----------------+
и есть запрос к базе:
Код:
mysql> select musicComposition.id,musicComposition.name, color,styles.name
from
compositionInStyles,musicComposition,styles
where
musicComposition.id = compositionInStyles.compositionId
AND
compositionInStyles.styleId = styles.id ORDER BY musicComposition.id;
| 960 | She Can Get It | #23297b | Зарубежный Рок |
| 961 | Gimme A Sign | #8b0714 | Хип-Хоп |
| 961 | Gimme A Sign | #c7e0e0 | Зарубежный Поп |
| 961 | Gimme A Sign | #23297b | Зарубежный Рок |
| 962 | Great Escape | #8b0714 | Хип-Хоп |
| 962 | Great Escape | #c7e0e0 | Зарубежный Поп |
| 962 | Great Escape | #23297b | Зарубежный Рок |
| 963 | Let It Rock [Filthy Dukes Remix] | #23297b | Зарубежный Рок |
| 963 | Let It Rock [Filthy Dukes Remix] | #8b0714 | Хип-Хоп |
| 963 | Let It Rock [Filthy Dukes Remix] | #c7e0e0 | Зарубежный Поп |
+-----+-----------------------------------------------------------------+---------+-------------------------------------+
2200 rows in set (0.04 sec)
from
compositionInStyles,musicComposition,styles
where
musicComposition.id = compositionInStyles.compositionId
AND
compositionInStyles.styleId = styles.id ORDER BY musicComposition.id;
| 960 | She Can Get It | #23297b | Зарубежный Рок |
| 961 | Gimme A Sign | #8b0714 | Хип-Хоп |
| 961 | Gimme A Sign | #c7e0e0 | Зарубежный Поп |
| 961 | Gimme A Sign | #23297b | Зарубежный Рок |
| 962 | Great Escape | #8b0714 | Хип-Хоп |
| 962 | Great Escape | #c7e0e0 | Зарубежный Поп |
| 962 | Great Escape | #23297b | Зарубежный Рок |
| 963 | Let It Rock [Filthy Dukes Remix] | #23297b | Зарубежный Рок |
| 963 | Let It Rock [Filthy Dukes Remix] | #8b0714 | Хип-Хоп |
| 963 | Let It Rock [Filthy Dukes Remix] | #c7e0e0 | Зарубежный Поп |
+-----+-----------------------------------------------------------------+---------+-------------------------------------+
2200 rows in set (0.04 sec)
не трудно заметить что я получаю вообщемто лишнюю инфу, хотелось бы получить что-то подобное:
Код:
| 962 | Great Escape | #8b0714 #c7e0e0 #23297b | Хип-Хоп Зарубежный Поп Зарубежный Рок |
| 963 | Let It Rock [Filthy Dukes Remix] | #23297b #8b0714 #c7e0e0 | Зарубежный Рок Хип-Хоп Зарубежный Поп |
+-----+--------------------------------------------
| 963 | Let It Rock [Filthy Dukes Remix] | #23297b #8b0714 #c7e0e0 | Зарубежный Рок Хип-Хоп Зарубежный Поп |
+-----+--------------------------------------------
загвозда в том что не могу придумать подходящий запрос.
хотелось бы реализовать все одним запросом и без встраевыемых функций\процедур.
Заранее спасибо откликнувшимся.
судя по всему автору помогли с вариантом, когда которые нужно было конкатить идут просто в отдельные столбцы, у меня же в теории количество конкатов не ограничено.
в общем-то неплохой пример.попробую поразбираться
Если количество стилей может меняться (то есть простым if'ом обойтись нельзя), то одним запросом это сделать невозможно, потому что нужен цикл. Нужного результата можно добиться с помощью дополнительной процедуры, если он очень необходим.