Well here\'s my problem I have three tables; regions, countries, states. Countries can be inside of regions, states can be inside of regions. Regions are the top of the fo
Well, i have two tables:
a) Song number b) Song title ....
and i have an third
The problem is that some kinds of playlists have link to other playlists. But in mysql we don't have foreign key that is associated with two tables.
My solution: I will put a third column in songs_to_playlist_relation. That column will be boolean. If 1 then song, else will link to the playlist table.
So:
a) Playlist_number (int) b) Is song (boolean) c) Relative number (song number or playlist number) (int) (not foreign key to any table)
#create table songs queries.append("SET SQL_MODE =That's all!NO_AUTO_VALUE_ON_ZERO
;") queries.append("CREATE TABLEsongs
(NUMBER
int(11) NOT NULL,SONG POSITION
int(11) NOT NULL,PLAY SONG
tinyint(1) NOT NULL DEFAULT '1',SONG TITLE
varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,DESCRIPTION
varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,ARTIST
varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'Άγνωστος καλλιτέχνης',AUTHOR
varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'Άγνωστος στιχουργός',COMPOSER
varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'Άγνωστος συνθέτης',ALBUM
varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'Άγνωστο άλμπουμ',YEAR
int(11) NOT NULL DEFAULT '33',RATING
int(11) NOT NULL DEFAULT '5',IMAGE
varchar(600) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,SONG PATH
varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,SONG REPEAT
int(11) NOT NULL DEFAULT '0',VOLUME
float NOT NULL DEFAULT '1',SPEED
float NOT NULL DEFAULT '1') ENGINE=InnoDB DEFAULT CHARSET=utf8;") queries.append("ALTER TABLEsongs
ADD PRIMARY KEY (NUMBER
), ADD UNIQUE KEYPOSITION
(SONG POSITION
), ADD UNIQUE KEYTITLE
(SONG TITLE
), ADD UNIQUE KEYPATH
(SONG PATH
);") queries.append("ALTER TABLEsongs
MODIFYNUMBER
int(11) NOT NULL AUTO_INCREMENT;")#create table playlists queries.append("CREATE TABLE `playlists` (`NUMBER` int(11) NOT NULL,`PLAYLIST POSITION` int(11) NOT NULL,`PLAYLIST TITLE` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`PLAYLIST PATH` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;") queries.append("ALTER TABLE `playlists` ADD PRIMARY KEY (`NUMBER`),ADD UNIQUE KEY `POSITION` (`PLAYLIST POSITION`),ADD UNIQUE KEY `TITLE` (`PLAYLIST TITLE`),ADD UNIQUE KEY `PATH` (`PLAYLIST PATH`);") queries.append("ALTER TABLE `playlists` MODIFY `NUMBER` int(11) NOT NULL AUTO_INCREMENT;") #create table for songs to playlist relation queries.append("CREATE TABLE `songs of playlist` (`PLAYLIST NUMBER` int(11) NOT NULL,`SONG OR PLAYLIST` tinyint(1) NOT NULL DEFAULT '1',`RELATIVE NUMBER` int(11) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;") queries.append("ALTER TABLE `songs of playlist` ADD KEY `PLAYLIST NUMBER` (`PLAYLIST NUMBER`) USING BTREE;") queries.append("ALTER TABLE `songs of playlist` ADD CONSTRAINT `playlist of playlist_ibfk_1` FOREIGN KEY (`PLAYLIST NUMBER`) REFERENCES `playlists` (`NUMBER`) ON DELETE RESTRICT ON UPDATE RESTRICT")
playlists_query = "SELECT s1.*, s3.*, s4.* FROM songs as s1 INNER JOIN `songs of playlist` as s2 ON s1.`NUMBER` = s2.`RELATIVE NUMBER` INNER JOIN `playlists` as s3 ON s3.`NUMBER` = s2.`PLAYLIST NUMBER` INNER JOIN `playlists` as s4 ON s4.`NUMBER` = s2.`RELATIVE NUMBER` ORDER BY s3.`PLAYLIST POSITION`,`s1`.`SONG POSITION`"