Сообщение от
MickyMaus --
-- Структура таблицы `jos_musicbox_pls`
--
Код:
CREATE TABLE `jos_musicbox_pls` (
`id` int(11) NOT NULL auto_increment,
`songid` int(11) NOT NULL,
`userid` int(11) NOT NULL,
`playlist` varchar(255) NOT NULL default 'MY SONGS',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=679 ;
--
-- Структура таблицы `jos_musicbox_playlists`
--
Код:
CREATE TABLE `jos_musicbox_playlists` (
`userid` int(11) NOT NULL,
`playlistname` text NOT NULL,
KEY `idx_userid` (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Во-первых: у тебя одна таблица или две?
Во-вторых: опиши пожалуйста конкретнее, что надо сделать (выбрать все плейлисты текущего юзера, выбрать все песни этих листов и сгруппировать по листам?)
Если я правильно понял то вот как все должно быть
1.1. Если плейлист к песням один ко многим:
Код:
CREATE TABLE `playlists` (
`id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL,
`playlist_name` varchar(255) NOT NULL default 'MY SONGS',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
CREATE TABLE `tracks` (
`id` int(11) NOT NULL auto_increment,
`playlist_id` int(11) NOT NULL,
`track_name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
1.1. Если плейлист к песням многие ко многим (одна песня в несколько листов может входить):
Код:
CREATE TABLE `playlists` (
`id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL,
`playlist_name` varchar(255) NOT NULL default 'MY SONGS',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
CREATE TABLE `tracks` (
`id` int(11) NOT NULL auto_increment,
`track_name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
CREATE TABLE `tracks_playlists` (
`track_id` int(11) NOT NULL,
`playlist_id` int(11) NOT NULL,
PRIMARY KEY (`track_id`,`playlist_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
2.1. Код PHP для создания XML плейлистов юзера в первом случае:
PHP код:
$UID = intval($user);
$Query = "SELECT p.id AS playlist_id, t.id AS track_id, playlist_name, track_name
FROM playlists p
LEFT JOIN tracks t ON p.id = t.playlist_id
WHERE p.user_id = $UID";
$Result = mysql_query($Query);
$Playlists = array();
while($Track = mysql_fetch_assoc($Result))
{
$p = $Track['playlist_id'];
$t = $Track['track_id'];
if(!isset($Playlists[$p])) $Playlists[$p] = array();
$Playlists[$p][$t] = $Track;
}
// теперь $Playlists - структурированны двухмерный массив
// листов и треков для каждого листа. Запрос к базе был 1.
2.2. Тот же самый случай но второй вариант (многие ко многим)
PHP код:
$Query = "SELECT p.id AS playlist_id, t.id AS track_id, playlist_name, track_name
FROM playlists p
INNER JOIN tracks_playlists pt ON pt.playlist_id = p.id
INNER JOIN tracks t ON pt.track_id = t.id
WHERE p.user_id = $UID";
// Все остальное в точности как в варианте 1