+ >
+ )
+}
+
+function Panel() {
+ return (
+ <>
+ [Placeholder Panel]
+ >
+ );
+}
+
+const CalculateAccuracy=(cool,fine,safe,sad,worst)=>{
+ var noteCount = cool+fine+safe+sad+worst;
+ var sum = cool+(fine*0.5)+(safe*0.1)+(sad*0.05);
+ return sum/noteCount;
+}
+
+function Profile(){
+ let { username } = useParams();
+ let match = useRouteMatch();
+ var [updateProfile,setProfile] = useState(false);
+ var [playcount,setPlayCount] = useState(0);
+ var [fccount,setFCCount] = useState(0);
+ var [cleared,setClear] = useState("");
+ var [accuracy,setAccuracy] = useState("-%");
+ var [rating,setRating] = useState(0);
+ var [lastPlayed,setLastPlayed] = useState(new Date());
+ var [update,setUpdate] = useState(false);
+ var [diffs,setDiffs] = useState({});
+ var [user,setUserData] = useState({});
+
+ function CalculateClear(easy,normal,hard,ex,exex) {
+ return "E:"+easy+"/"+diffs.E+" N:"+normal+"/"+diffs.N+" H:"+hard+"/"+diffs.H+" EX:"+ex+"/"+diffs.EX+" EXEX:"+exex+"/"+diffs.EXEX;
+ }
+
+ useEffect(()=>{
+ axios.get("http://projectdivar.com:4501/userdata/"+username)
+ .then((data)=>{setUserData(data.data);setPlayCount(data.data.playcount);setFCCount(data.data.fccount);setRating(data.data.rating);setLastPlayed(data.data.last_played);setAccuracy(CalculateAccuracy(data.data.cool,data.data.fine,data.data.safe,data.data.sad,data.data.worst));
+ return axios.get("http://projectdivar.com:4501/songdiffs")})
+ .then((data)=>{setDiffs(data.data)})
+ },[update])
+
+ useEffect(()=>{
+ setClear(CalculateClear(user.eclear,user.nclear,user.hclear,user.exclear,user.exexclear))
+ },[diffs,user])
+
+ return (
+ <>
+
{username+"'s Profile"}
+
+
+
+
+ >
+ );
+}
+
+function Rankings(){
+ let { sort,sortOrder } = useParams();
+ let match = useRouteMatch();
+ var [users,setUsers] = useState([]);
+ var [updateUsers,setUpdateUsers] = useState(false);
+ var [isLoading,setIsLoading] = useState(true);
+
+ useEffect(()=>{
+ axios.get("http://projectdivar.com:4501/users/"+sort+"/"+sortOrder+"?limit=100&offset=0")
+ .then((data)=>{setUsers(data.data)
+ setIsLoading(false);})
+ //.then(()=>{console.log(users)})
+ },[updateUsers])
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+ {users.map((user)=><>
+
+
+
{user.username}
+
{user.last_played}
+
{user.rating}
+
{user.playcount}
+
{user.fccount}
+
+ >)}
+
+ >
+ );
+}
+
+function App() {
+ return (
+
+
+
+
+
+
+
+
+
-
-
Project DivaR
- Under construction!
+
+
+
Sidebar Contents
+ Rankings
+ Item 2
+ Item 3
+ Item 4
+
+
+
+
+
+
+
+
+
+
+
Project DivaR
+ Under construction!
+
+
+
-
;
+ );
}
export default App;
diff --git a/server/app.js b/server/app.js
index 15cebe4..8338061 100644
--- a/server/app.js
+++ b/server/app.js
@@ -31,7 +31,7 @@ new Pool({
})
app.get('/song/:songname', (req, res) => {
- db.query('select * from songs where name=$1 or romanized_name=$1 or english_name=$1', [req.params.songname] , (error, results) => {
+ db.query('select * from songs where name=$1 or romanized_name=$1 or english_name=$1 limit 1', [req.params.songname] , (error, results) => {
if (error) {
res.status(500).json(error.message)
} else {
@@ -45,7 +45,7 @@ app.post('/register', (req, res) => {
if (req.body && req.body.username &&
req.body.username.length>2 && req.body.email) {
var duplicateFound=false;
- db.query('select * from users where username=$1',[req.body.username])
+ db.query('select * from users where username=$1 limit 1',[req.body.username])
.then((data)=>{
if (data.rows.length>0) {
throw new Error("User "+data.rows[0].username+" already exists!");
@@ -60,6 +60,22 @@ req.body.username.length>2 && req.body.email) {
}
})
+app.delete('/remove',(req,res)=>{
+ if (req.body &&
+ req.body.username!==undefined && req.body.authentication_token!==undefined && req.body.playid!==undefined) {
+ var userObj={},songObj={},rating=0,isFirstClear=false;
+ db.query("select id,authentication_token,playcount,fccount,cool,fine,safe,sad,worst,eclear,nclear,hclear,exclear,exexclear from users where username=$1 limit 1",[req.body.username])
+ .then((data)=>{if(data && data.rows.length>0){userObj=data.rows[0];if (req.body.authentication_token===userObj.authentication_token){return db.query("delete from plays where id=$1 and userid=$2 returning *",[req.body.playid,userObj.id])}else{throw new Error("Could not authenticate user!")}}else{throw new Error("Cannot find user!")}})
+ .then((data)=>{if(data && data.rows.length>0){songObj=data.rows[0];return CalculateRating(req.body.username)}else{throw new Error("Could not find play!")}})
+ .then((data)=>{rating=data;return db.query("select * from plays where songid=$1 and userid=$2 and difficulty=$3 limit 1",[songObj.songid,userObj.id,songObj.difficulty])})
+ .then((data)=>{if(data && data.rows.length===0){isFirstClear=true;}/*console.log([data,userObj.playcount-1,(songObj.safe==0&&songObj.sad==0&&songObj.worst==0)?userObj.fccount-1:userObj.fccount,userObj.cool-songObj.cool,userObj.fine-songObj.fine,userObj.safe-songObj.safe,userObj.sad-songObj.sad,userObj.worst-songObj.worst,(songObj.difficulty=="E")?userObj.ecount-1:userObj.ecount,(songObj.difficulty=="N")?userObj.ncount-1:userObj.ncount,(songObj.difficulty=="H")?userObj.hcount-1:userObj.hcount,(songObj.difficulty=="EX")?userObj.excount-1:userObj.excount,(songObj.difficulty=="EXEX")?userObj.exexcount-1:userObj.exexcount]);*/return db.query("update users set rating=$1,playcount=$2,fccount=$3,cool=$4,fine=$5,safe=$6,sad=$7,worst=$8,eclear=$9,nclear=$10,hclear=$11,exclear=$12,exexclear=$13 where id=$14 returning rating,playcount,fccount,cool,fine,safe,sad,worst,eclear,nclear,hclear,exclear,exexclear",[rating,userObj.playcount-1,(songObj.safe==0&&songObj.sad==0&&songObj.worst==0)?userObj.fccount-1:userObj.fccount,userObj.cool-songObj.cool,userObj.fine-songObj.fine,userObj.safe-songObj.safe,userObj.sad-songObj.sad,userObj.worst-songObj.worst,(songObj.difficulty=="E" && isFirstClear)?userObj.eclear-1:userObj.eclear,(songObj.difficulty=="N" && isFirstClear)?userObj.nclear-1:userObj.nclear,(songObj.difficulty=="H" && isFirstClear)?userObj.hclear-1:userObj.hclear,(songObj.difficulty=="EX" && isFirstClear)?userObj.exclear-1:userObj.exclear,(songObj.difficulty=="EXEX" && isFirstClear)?userObj.exexclear-1:userObj.exexclear,userObj.id])})
+ .then((data)=>{if(data && data.rows.length>0){res.status(200).json({user:data.rows[0],song:songObj})}else{throw new Error("Could not update user information, but song is deleted!")}})
+ .catch((err)=>{res.status(500).json(err.message)})
+ } else {
+ res.status(400).json("Missing required parameters!");
+ }
+})
+
app.post('/submit', (req, res) => {
if (req.body &&
req.body.username!==undefined && req.body.authentication_token!==undefined && req.body.song!==undefined && req.body.difficulty!==undefined && req.body.cool!==undefined && req.body.fine!==undefined && req.body.safe!==undefined && req.body.sad!==undefined && req.body.worst!==undefined && req.body.percent!==undefined) {
@@ -71,18 +87,29 @@ app.post('/submit', (req, res) => {
if (!(req.body.difficulty==="H"||req.body.difficulty==="N"||req.body.difficulty==="E"||req.body.difficulty==="EX"||req.body.difficulty==="EXEX"))
{throw new Error("Invalid difficulty!")}
- var userId = -1,songId=-1;
- db.query("select id,authentication_token from users where username=$1",[req.body.username])
- .then((data)=>{if(data.rows.length>0){if (data.rows[0].authentication_token===req.body.authentication_token){userId=data.rows[0].id;return db.query("select id from songs where name=$1 or romanized_name=$1 or english_name=$1",[req.body.song])}else{throw new Error("Could not authenticate!")}}else{throw new Error("Could not find user.")}
+ var songsubmitdata={},isFC=false,songRating=-1,userId = -1,songId=-1,playcount=-1,fccount=-1,cool=-1,fine=-1,safe=-1,sad=-1,worst=-1,alreadyPassed=false,eclear=-1,nclear=-1,hclear=-1,exclear=-1,exexclear=-1;
+ db.query("select id,authentication_token,playcount,fccount,cool,fine,safe,sad,worst,eclear,nclear,hclear,exclear,exexclear from users where username=$1 limit 1",[req.body.username])
+ .then((data)=>{if(data && data.rows.length>0){if (data.rows[0].authentication_token===req.body.authentication_token){
+ var obj = data.rows[0];
+ eclear=obj.eclear;nclear=obj.nclear;hclear=obj.hclear;exclear=obj.exclear;exexclear=obj.exexclear;
+ cool=data.rows[0].cool;fine=data.rows[0].fine;safe=data.rows[0].safe;sad=data.rows[0].sad;worst=data.rows[0].worst;
+ fccount=data.rows[0].fccount;playcount=data.rows[0].playcount;userId=data.rows[0].id;return db.query("select id from songs where name=$1 or romanized_name=$1 or english_name=$1 limit 1",[req.body.song])}else{throw new Error("Could not authenticate!")}}else{throw new Error("Could not find user.")}
})
- .then((data)=>{if(data.rows.length>0){songId=data.rows[0].id;var score=CalculateSongScore({cool:req.body.cool,fine:req.body.fine,safe:req.body.safe,sad:req.body.sad,worst:req.body.worst,percent:req.body.percent,difficulty:req.body.difficulty,fail:fail});return db.query("insert into plays(songId,userId,difficulty,cool,fine,safe,sad,worst,percent,date,score,fail) values($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12) returning *",[songId,userId,req.body.difficulty,req.body.cool,req.body.fine,req.body.safe,req.body.sad,req.body.worst,req.body.percent,new Date(),score,fail])}else{throw new Error("Could not find song.")}})
- .then((data)=>{if(data.rows.length>0){
- var songsubmitdata = data.rows[0];
- return CalculateRating(req.body.username).then((data)=>{db.query("update users set rating=$1 where username=$2",[data,req.body.username])})
- .then(()=>{return songsubmitdata;})}else{throw new Error("Could not submit song.")}})
+ .then((data)=>{if(data && data.rows.length>0){songId=data.rows[0].id; return db.query('select rating from songdata where songid=$1 and difficulty=$2 limit 1',[songId,req.body.difficulty])}else{throw new Error("Could not find song.")}})
+ .then((data)=>{songRating=data.rows[0].rating;return db.query("select id from plays where userid=$1 and score>0 and difficulty=$2 and songid=$3 limit 1",[userId,req.body.difficulty,songId])})
+ .then((data)=>{if(data && data.rows.length>0){alreadyPassed=true;/*console.log(data);*/};var score=CalculateSongScore({rating:songRating,cool:req.body.cool,fine:req.body.fine,safe:req.body.safe,sad:req.body.sad,worst:req.body.worst,percent:req.body.percent,difficulty:req.body.difficulty,fail:fail});return db.query("insert into plays(songId,userId,difficulty,cool,fine,safe,sad,worst,percent,date,score,fail) values($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12) returning *",[songId,userId,req.body.difficulty,req.body.cool,req.body.fine,req.body.safe,req.body.sad,req.body.worst,req.body.percent,new Date(),score,fail])})
+ .then((data)=>{if(data && data.rows.length>0){
+ songsubmitdata = data.rows[0];
+ //console.log(alreadyPassed+" / "+typeof(alreadyPassed))
+ if(alreadyPassed===false){switch(req.body.difficulty){case"E":{eclear++}break;case"N":{nclear++}break;case"H":{hclear++}break;case"EX":{exclear++}break;case"EXEX":{exexclear++}break;}}
+ isFC = songsubmitdata.safe===0 && songsubmitdata.sad===0 && songsubmitdata.worst===0;
+ return CalculateRating(req.body.username)}else{throw new Error("Could not submit song.")}})
+ .then((data)=>{return db.query("update users set rating=$1,last_played=$3,playcount=$4,fccount=$5,cool=$6,fine=$7,safe=$8,sad=$9,worst=$10,eclear=$11,nclear=$12,hclear=$13,exclear=$14,exexclear=$15 where username=$2",[data,req.body.username,new Date(),++playcount,fccount+((isFC)?1:0),cool+Number(req.body.cool),fine+Number(req.body.fine),safe+Number(req.body.safe),sad+Number(req.body.sad),worst+Number(req.body.worst),eclear,nclear,hclear,exclear,exexclear])})
+ .then((data)=>{return songsubmitdata;})
.then((data)=>{res.status(200).json(data);})
.catch((err)=>{
- console.log(req.body);
+ //console.log(req.body);
+ //console.log(err);
res.status(500).json(err.message);})
} else {
console.log(req.body);
@@ -95,18 +122,28 @@ CalculateSongScore=(song)=>{
var noteCount=song.cool+song.fine+song.safe+song.sad+song.worst;
var comboBreaks=song.safe+song.sad+song.worst;
var scoreMult=1;
+ if(comboBreaks===0){scoreMult=2}else if(song.percent>=95){scoreMult=1.2}else{scoreMult=1}
switch (song.difficulty){
- case "H":{if(song.percent<60){scoreMult=0}else{if(comboBreaks===0){scoreMult=5}else if(song.percent>=90){scoreMult=3}else{scoreMult=1.5}}}break;
+ case "E":{if(song.percent<30){scoreMult=0}}break;
+ case "N":{if(song.percent<50){scoreMult=0}}break;
+ case "H":{if(song.percent<60){scoreMult=0}}break;
case "EX":
- case "EXEX":{if(song.percent<70){scoreMult=0}else{if(comboBreaks===0){scoreMult=10}else if(song.percent>=95){scoreMult=6}else{scoreMult=5}}}break;
+ case "EXEX":{if(song.percent<70){scoreMult=0}}break;
default:{
- if(song.percent<60){scoreMult=0}else{if(comboBreaks===0){scoreMult=3}else if(song.percent>=90){scoreMult=2}else{scoreMult=1}}
+ if(song.percent<60){scoreMult=0}
}
}
var score = ((song.cool*100+song.fine*50+song.safe*10+song.sad*5)/((noteCount)/(noteCount/1000)))*scoreMult
+ score += Math.pow(song.rating,3)/5
return Number(score);
}
+CalculateAccuracy=(cool,fine,safe,sad,worst)=>{
+ var noteCount = cool+fine+safe+sad+worst;
+ var sum = cool+(fine*0.5)+(safe*0.1)+(sad*0.05);
+ return sum/noteCount;
+}
+
CalculateRating=(username)=>{
var songs = [];
var debugScoreList = "";
@@ -117,67 +154,120 @@ CalculateRating=(username)=>{
.then((data)=>{if(data.rows.length>0){return data.rows.reduce((sum,song,i)=>{
return sum+Number(CalculateSongScore(song)*(Math.pow(0.8,i)))},0)}else{return 0}})
.catch((err)=>{throw new Error(err.message)})*/
- return db.query('select id from users where username=$1',[username])
- .then((data)=>{if(data.rows.length>0){userId=data.rows[0].id;return db.query('select * from songs order by id asc;')}else{return 0}})
+ return db.query('select id from users where username=$1 limit 1',[username])
+ .then((data)=>{if(data.rows.length>0){userId=data.rows[0].id;return db.query('select * from songs order by id asc')}else{return 0}})
.then((data)=>{if(data.rows.length>0){songs=data.rows;return Promise.all(data.rows.map((song)=>{return db.query('select * from plays where userId=$1 and songId=$2 order by score desc limit 100',[userId,song.id]).then((data)=>{if (data.rows.length>0){debugScoreList+=song.name+"\n"; songs[song.id-1].score=data.rows.reduce((sum,play,i)=>{debugScoreList+=" "+(play.score)+" -> "+(play.score*Math.pow(0.8,i))+"\n";/*console.log("Play score:"+play.score+". Sum:"+sum);*/return sum+play.score*Math.pow(0.8,i);},0);debugScoreList+=" "+songs[song.id-1].score+"\n";}})}))}})
.then(()=>{return songs.sort((a,b)=>{var scorea=(a.score)?a.score:0;var scoreb=(b.score)?b.score:0;return (scorea>scoreb)?-1:1;}).reduce((sum,song,i)=>{if(song.score){debugScoreList+=song.name+": "+song.score+" -> "+(song.score*Math.pow(0.8,i))+"\n";return sum+song.score*Math.pow(0.8,i)}else{return sum}},0);})
.then((data)=>{/*console.log(debugScoreList);*/return data})
}
+app.get('/songdiffs',(req,res)=>{
+ var diffObj={}
+ db.query("select COUNT(*) from songdata where difficulty='E'")
+ .then((data)=>{diffObj.E=data.rows[0].count;return db.query("select COUNT(*) from songdata where difficulty='N'")})
+ .then((data)=>{diffObj.N=data.rows[0].count;return db.query("select COUNT(*) from songdata where difficulty='H'")})
+ .then((data)=>{diffObj.H=data.rows[0].count;return db.query("select COUNT(*) from songdata where difficulty='EX'")})
+ .then((data)=>{diffObj.EX=data.rows[0].count;return db.query("select COUNT(*) from songdata where difficulty='EXEX'")})
+ .then((data)=>{diffObj.EXEX=data.rows[0].count;res.status(200).json(diffObj)})
+ .catch((err)=>{res.status(500).json(err.message)})
+})
+
+app.get('/accuracy/:username',(req,res)=>{
+ db.query('select cool,fine,safe,sad,worst from users where username=$1',[req.params.username])
+ .then((data)=>{if (data.rows.length>0){return CalculateAccuracy(data.rows[0].cool,data.rows[0].fine,data.rows[0].safe,data.rows[0].sad,data.rows[0].worst)}else{throw new Error("User does not exist!")}})
+ .then((data)=>{res.status(200).json({accuracy:data})})
+ .catch((err)=>{res.status(500).json(err.message)})
+})
+
app.get('/recalculatescore/:playid',(req,res)=>{
var userId=-1;
var username=null;
- db.query('select * from plays where id=$1',[req.params.playid])
- .then((data)=>{if (data.rows.length>0){var song=data.rows[0];userId=song.userid;console.log(song);var score=CalculateSongScore({cool:song.cool,fine:song.fine,safe:song.safe,sad:song.sad,worst:song.worst,percent:song.percent,difficulty:song.difficulty,fail:song.fail});return db.query('update plays set score=$1 where id=$2 returning *',[score,req.params.playid]);}else{throw new Error("This play does not exist!")}})
- .then((data)=>{if (data.rows.length>0){
- var scoreData=data.rows[0];
- return db.query('select username from users where id=$1',[userId]).then((data)=>{username=data.rows[0].username; return CalculateRating(username)}).then((data)=>{db.query("update users set rating=$1 where username=$2",[data,username])})
- .then(()=>{return scoreData;})
- }else{throw new Error("Failed to update score!")}})
- .then((data)=>res.status(200).json(data)).catch((err)=>{res.status(500).json(err.message);})
+ var songRating=-1;
+ var song;
+
+ db.query('select * from plays where id=$1 limit 1',[req.params.playid])
+ .then((data)=>{if (data.rows.length>0){song=data.rows[0];userId=song.userid;/*console.log(song);*/
+ return db.query('select rating from songdata where songid=$1 and difficulty=$2 limit 1',[song.songid,song.difficulty])
+ }else{throw new Error("This play does not exist!")}})
+ .then((data)=>{if (data.rows.length>0){songRating=data.rows[0].rating;var score=CalculateSongScore({rating:songRating,cool:song.cool,fine:song.fine,safe:song.safe,sad:song.sad,worst:song.worst,percent:song.percent,difficulty:song.difficulty,fail:song.fail});return db.query('update plays set score=$1 where id=$2 returning *',[score,req.params.playid]);}else{throw new Error("Failed to retrieve song data!")}})
+ .then((data)=>{console.log(data);if (data.rows.length>0){
+ var scoreData=data.rows[0];
+ return db.query('select username from users where id=$1',[userId]).then((data)=>{username=data.rows[0].username; return CalculateRating(username)}).then((data)=>{db.query("update users set rating=$1 where username=$2",[data,username])})
+ .then(()=>{return scoreData;})
+ }else{throw new Error("Failed to update score!")}})
+ .then((data)=>res.status(200).json(data)).catch((err)=>{console.log(err);res.status(500).json(err.message);})
});
+/*app.get('/playdata',(req,res)=>{
+ db.query('select * from plays')
+ .then((data)=>{res.status(200).json(data.rows)})
+ .catch((err)=>res.status(500).json(err.message))
+})*/
+
app.get('/bestplay/:username/:songname/:difficulty',(req,res)=>{
var songId=-1,userId=-1;
- db.query('select id from users where username=$1',[req.params.username])
- .then((data)=>{if (data.rows.length>0){userId=data.rows[0].id;if(req.params.songname){return db.query('select id from songs where name=$1 or romanized_name=$1 or english_name=$1', [req.params.songname])}else{return db.query('select * from plays where userid=$1 order by score desc',[userId])}}else{throw new Error("Cannot find user!")}})
- .then((data)=>{if(req.params.songname &&data.rows.length>0){songId=data.rows[0].id;if(req.params.difficulty){return db.query('select * from plays where userid=$1 and songid=$2 and difficulty=$3 order by score desc,percent desc limit 1',[userId,songId,req.params.difficulty])}else{return db.query('select * from plays where userid=$1 and songid=$2 order by score desc,percent desc limit 1',[userId,songId])}}else{res.status(400).json("Could not find song!")}})
+ db.query('select id from users where username=$1 limit 1',[req.params.username])
+ .then((data)=>{if (data.rows.length>0){userId=data.rows[0].id;if(req.params.songname){return db.query('select id from songs where name=$1 or romanized_name=$1 or english_name=$1 limit 1', [req.params.songname])}else{return db.query('select * from plays where userid=$1 order by score desc',[userId])}}else{throw new Error("Cannot find user!")}})
+ .then((data)=>{if(req.params.songname &&data.rows.length>0){songId=data.rows[0].id;return db.query('select * from plays where userid=$1 and songid=$2 and difficulty=$3 order by score desc,percent desc limit 1',[userId,songId,req.params.difficulty])}else{res.status(400).json("Could not find song!")}})
.then((data)=>{if(data && data.rows.length>0){res.status(200).json(data.rows[0])}else{res.status(400).json("No data found!")}})
.catch((err)=>{res.status(500).json(err.message+JSON.stringify(req.body))})
})
+app.get('/userdata/:username',(req,res)=>{
+ var songId=-1,userId=-1;
+ db.query('select playcount,fccount,rating,last_played,cool,fine,safe,sad,worst,eclear,nclear,hclear,exclear,exexclear from users where username=$1 limit 1',[req.params.username])
+ .then((data)=>{if(data && data.rows.length>0){res.status(200).json(data.rows[0])}})
+ .catch((err)=>{res.status(500).json(err.message)})
+})
+
app.get('/playcount/:username/:songname/:difficulty',(req,res)=>{
var songId=-1,userId=-1;
- db.query('select id from users where username=$1',[req.params.username])
- .then((data)=>{if (data.rows.length>0){userId=data.rows[0].id;if(req.params.songname){return db.query('select id from songs where name=$1 or romanized_name=$1 or english_name=$1', [req.params.songname])}else{return db.query('select * from plays where userid=$1',[userId])}}else{throw new Error("Cannot find user!")}})
- .then((data)=>{if(req.params.songname &&data.rows.length>0){songId=data.rows[0].id;if(req.params.difficulty){return db.query('select * from plays where userid=$1 and songid=$2 and difficulty=$3 order by score desc',[userId,songId,req.params.difficulty])}else{return db.query('select * from plays where userid=$1 and songid=$2',[userId,songId])}}else{res.status(400).json("Could not find song!")}})
+ db.query('select id from users where username=$1 limit 1',[req.params.username])
+ .then((data)=>{if (data.rows.length>0){userId=data.rows[0].id;return db.query('select id from songs where name=$1 or romanized_name=$1 or english_name=$1 limit 1', [req.params.songname])}else{throw new Error("Cannot find user!")}})
+ .then((data)=>{if(req.params.songname &&data.rows.length>0){songId=data.rows[0].id;return db.query('select * from plays where userid=$1 and songid=$2 and difficulty=$3 order by score desc',[userId,songId,req.params.difficulty])}else{res.status(400).json("Could not find song!")}})
.then((data)=>{if(data && data.rows.length>0){res.status(200).json({playcount:data.rows.length})}else{res.status(200).json({playcount:0})}})
.catch((err)=>{res.status(500).json(err.message)})
})
app.get('/songpasscount/:username/:songname/:difficulty',(req,res)=>{
var songId=-1,userId=-1;
- db.query('select id from users where username=$1',[req.params.username])
- .then((data)=>{if (data.rows.length>0){userId=data.rows[0].id;if(req.params.songname){return db.query('select id from songs where name=$1 or romanized_name=$1 or english_name=$1', [req.params.songname])}else{return db.query('select * from plays where userid=$1 and score>0',[userId])}}else{throw new Error("Cannot find user!")}})
- .then((data)=>{if(req.params.songname &&data.rows.length>0){songId=data.rows[0].id;if(req.params.difficulty){return db.query('select * from plays where userid=$1 and songid=$2 and difficulty=$3 and score>0',[userId,songId,req.params.difficulty])}else{return db.query('select * from plays where userid=$1 and songid=$2 and score>0',[userId,songId])}}else{res.status(400).json("Could not find song!")}})
+ db.query('select id from users where username=$1 limit 1',[req.params.username])
+ .then((data)=>{if (data.rows.length>0){userId=data.rows[0].id;return db.query('select id from songs where name=$1 or romanized_name=$1 or english_name=$1 limit 1', [req.params.songname])}else{throw new Error("Cannot find user!")}})
+ .then((data)=>{if(req.params.songname &&data.rows.length>0){songId=data.rows[0].id;return db.query('select * from plays where userid=$1 and songid=$2 and difficulty=$3 and score>0',[userId,songId,req.params.difficulty])}else{res.status(400).json("Could not find song!")}})
.then((data)=>{if(data && data.rows.length>0){res.status(200).json({passcount:data.rows.length})}else{res.status(200).json({passcount:0})}})
.catch((err)=>{res.status(500).json(err.message)})
})
app.get('/songfccount/:username/:songname/:difficulty',(req,res)=>{
var songId=-1,userId=-1;
- db.query('select id from users where username=$1',[req.params.username])
- .then((data)=>{if (data.rows.length>0){userId=data.rows[0].id;if(req.params.songname){return db.query('select id from songs where name=$1 or romanized_name=$1 or english_name=$1', [req.params.songname])}else{return db.query('select * from plays where userid=$1 and safe=0 and sad=0 and worst=0',[userId])}}else{throw new Error("Cannot find user!")}})
- .then((data)=>{if(req.params.songname &&data.rows.length>0){songId=data.rows[0].id;if(req.params.difficulty){return db.query('select * from plays where userid=$1 and songid=$2 and difficulty=$3 and safe=0 and sad=0 and worst=0',[userId,songId,req.params.difficulty])}else{return db.query('select * from plays where userid=$1 and songid=$2 and safe=0 and sad=0 and worst=0',[userId,songId])}}else{res.status(400).json("Could not find song!")}})
+ db.query('select id from users where username=$1 limit 1',[req.params.username])
+ .then((data)=>{if (data.rows.length>0){userId=data.rows[0].id;return db.query('select id from songs where name=$1 or romanized_name=$1 or english_name=$1 limit 1', [req.params.songname])}else{throw new Error("Cannot find user!")}})
+ .then((data)=>{if(req.params.songname &&data.rows.length>0){songId=data.rows[0].id;return db.query('select * from plays where userid=$1 and songid=$2 and difficulty=$3 and safe=0 and sad=0 and worst=0',[userId,songId,req.params.difficulty])}else{res.status(400).json("Could not find song!")}})
.then((data)=>{if(data && data.rows.length>0){res.status(200).json({fccount:data.rows.length})}else{res.status(200).json({fccount:0})}})
.catch((err)=>{res.status(500).json(err.message)})
})
app.get('/rating/:username',(req,res)=>{
if (req.params.username) {
- db.query('select rating from users where username=$1',[req.params.username])
+ db.query('select rating from users where username=$1 limit 1',[req.params.username])
.then((data)=>{if(data.rows.length>0){res.status(200).json(data.rows[0])}else{res.status(200).json({rating:0})}})
} else {
res.status(400).json("Invalid username!")
}
+})
+
+app.get('/users/:orderby/:sortorder',(req,res)=>{
+ if (req.params.orderby && req.params.sortorder && req.query.limit && req.query.offset) {
+ var valid = ["rating","last_played","playcount","username","fccount"];
+ var validsort = ["desc","asc"];
+ if (valid.includes(req.params.orderby) && validsort.includes(req.params.sortorder)) {
+ db.query('select username,rating,last_played,playcount,fccount from users order by '+req.params.orderby+' '+req.params.sortorder+",rating desc limit $1 offset $2",[req.query.limit,req.query.offset])
+ .then((data)=>{return res.status(200).json(data.rows)})
+ .catch((err)=>{res.status(500).json(err.message)})
+ } else {
+ res.status(400).json("Not a valid sort option!");
+ }
+ } else {
+ res.status(400).json("Invalid query!")
+ }
})
\ No newline at end of file
diff --git a/server/updateallscore.js b/server/updateallscore.js
new file mode 100644
index 0000000..0d36cad
--- /dev/null
+++ b/server/updateallscore.js
@@ -0,0 +1,7 @@
+const axios = require('axios')
+
+axios.get("http://projectdivar.com:4501/playdata")
+.then((data)=>{data.data.forEach((song)=>{return axios.get("http://projectdivar.com:4501/recalculatescore/"+song.id)
+.then((data)=>{console.log(data.data)})
+.catch((err)=>{console.log(err.message)})})})
+.catch((err)=>{console.log(err.message)})
\ No newline at end of file
diff --git a/songData.sql b/songData.sql
new file mode 100644
index 0000000..e445fda
--- /dev/null
+++ b/songData.sql
@@ -0,0 +1,736 @@
+insert into songdata(songid,difficulty,rating) values(1,'E',1.5);
+insert into songdata(songid,difficulty,rating) values(1,'N',3);
+insert into songdata(songid,difficulty,rating) values(1,'H',5.5);
+insert into songdata(songid,difficulty,rating) values(1,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(2,'E',1.5);
+insert into songdata(songid,difficulty,rating) values(2,'N',4);
+insert into songdata(songid,difficulty,rating) values(2,'H',7);
+insert into songdata(songid,difficulty,rating) values(2,'EX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(3,'E',1.5);
+insert into songdata(songid,difficulty,rating) values(3,'N',4);
+insert into songdata(songid,difficulty,rating) values(3,'H',6);
+insert into songdata(songid,difficulty,rating) values(3,'EX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(4,'E',3.5);
+insert into songdata(songid,difficulty,rating) values(4,'N',5);
+insert into songdata(songid,difficulty,rating) values(4,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(4,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(5,'E',2);
+insert into songdata(songid,difficulty,rating) values(5,'N',5);
+insert into songdata(songid,difficulty,rating) values(5,'H',7.5);
+insert into songdata(songid,difficulty,rating) values(5,'EX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(6,'E',1.5);
+insert into songdata(songid,difficulty,rating) values(6,'N',4);
+insert into songdata(songid,difficulty,rating) values(6,'H',7.5);
+insert into songdata(songid,difficulty,rating) values(6,'EX',9);
+
+insert into songdata(songid,difficulty,rating) values(7,'E',2);
+insert into songdata(songid,difficulty,rating) values(7,'N',5);
+insert into songdata(songid,difficulty,rating) values(7,'H',7.5);
+insert into songdata(songid,difficulty,rating) values(7,'EX',9);
+
+insert into songdata(songid,difficulty,rating) values(8,'E',1.5);
+insert into songdata(songid,difficulty,rating) values(8,'N',4);
+insert into songdata(songid,difficulty,rating) values(8,'H',8);
+insert into songdata(songid,difficulty,rating) values(8,'EX',9);
+
+insert into songdata(songid,difficulty,rating) values(9,'E',2);
+insert into songdata(songid,difficulty,rating) values(9,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(9,'H',7.5);
+insert into songdata(songid,difficulty,rating) values(9,'EX',9.5);
+
+insert into songdata(songid,difficulty,rating) values(10,'E',2);
+insert into songdata(songid,difficulty,rating) values(10,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(10,'H',7);
+insert into songdata(songid,difficulty,rating) values(10,'EX',9);
+
+insert into songdata(songid,difficulty,rating) values(11,'E',4);
+insert into songdata(songid,difficulty,rating) values(11,'N',5.5);
+insert into songdata(songid,difficulty,rating) values(11,'H',6);
+insert into songdata(songid,difficulty,rating) values(11,'EX',7.5);
+insert into songdata(songid,difficulty,rating) values(11,'EXEX',8);
+
+insert into songdata(songid,difficulty,rating) values(12,'E',3);
+insert into songdata(songid,difficulty,rating) values(12,'N',5);
+insert into songdata(songid,difficulty,rating) values(12,'H',6);
+insert into songdata(songid,difficulty,rating) values(12,'EX',7);
+insert into songdata(songid,difficulty,rating) values(12,'EXEX',8);
+
+insert into songdata(songid,difficulty,rating) values(13,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(13,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(13,'EX',8.5);
+insert into songdata(songid,difficulty,rating) values(13,'EXEX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(14,'E',2);
+insert into songdata(songid,difficulty,rating) values(14,'N',3.5);
+insert into songdata(songid,difficulty,rating) values(14,'H',5);
+insert into songdata(songid,difficulty,rating) values(14,'EX',7);
+
+insert into songdata(songid,difficulty,rating) values(15,'E',1.5);
+insert into songdata(songid,difficulty,rating) values(15,'N',3.5);
+insert into songdata(songid,difficulty,rating) values(15,'H',5.5);
+insert into songdata(songid,difficulty,rating) values(15,'EX',7);
+insert into songdata(songid,difficulty,rating) values(15,'EXEX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(16,'N',6.5);
+insert into songdata(songid,difficulty,rating) values(16,'H',7);
+insert into songdata(songid,difficulty,rating) values(16,'EX',9);
+insert into songdata(songid,difficulty,rating) values(16,'EXEX',10);
+
+insert into songdata(songid,difficulty,rating) values(17,'E',3);
+insert into songdata(songid,difficulty,rating) values(17,'N',5);
+insert into songdata(songid,difficulty,rating) values(17,'H',6);
+insert into songdata(songid,difficulty,rating) values(17,'EX',7);
+insert into songdata(songid,difficulty,rating) values(17,'EXEX',8);
+
+insert into songdata(songid,difficulty,rating) values(18,'E',4);
+insert into songdata(songid,difficulty,rating) values(18,'N',5);
+insert into songdata(songid,difficulty,rating) values(18,'H',6);
+insert into songdata(songid,difficulty,rating) values(18,'EX',9);
+insert into songdata(songid,difficulty,rating) values(18,'EXEX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(19,'E',4.5);
+insert into songdata(songid,difficulty,rating) values(19,'N',5.5);
+insert into songdata(songid,difficulty,rating) values(19,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(19,'EX',8);
+insert into songdata(songid,difficulty,rating) values(19,'EXEX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(20,'E',1);
+insert into songdata(songid,difficulty,rating) values(20,'N',3);
+insert into songdata(songid,difficulty,rating) values(20,'H',5);
+insert into songdata(songid,difficulty,rating) values(20,'EX',7);
+insert into songdata(songid,difficulty,rating) values(20,'EXEX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(21,'E',2);
+insert into songdata(songid,difficulty,rating) values(21,'N',5);
+insert into songdata(songid,difficulty,rating) values(21,'H',6);
+insert into songdata(songid,difficulty,rating) values(21,'EX',8);
+insert into songdata(songid,difficulty,rating) values(21,'EXEX',8);
+
+insert into songdata(songid,difficulty,rating) values(22,'E',3);
+insert into songdata(songid,difficulty,rating) values(22,'N',4);
+insert into songdata(songid,difficulty,rating) values(22,'H',5.5);
+insert into songdata(songid,difficulty,rating) values(22,'EX',7);
+insert into songdata(songid,difficulty,rating) values(22,'EXEX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(23,'E',2);
+insert into songdata(songid,difficulty,rating) values(23,'N',5.5);
+insert into songdata(songid,difficulty,rating) values(23,'H',7.5);
+insert into songdata(songid,difficulty,rating) values(23,'EX',9.5);
+insert into songdata(songid,difficulty,rating) values(23,'EXEX',10);
+
+insert into songdata(songid,difficulty,rating) values(24,'E',3);
+insert into songdata(songid,difficulty,rating) values(24,'N',4);
+insert into songdata(songid,difficulty,rating) values(24,'H',5.5);
+insert into songdata(songid,difficulty,rating) values(24,'EX',7);
+insert into songdata(songid,difficulty,rating) values(24,'EXEX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(25,'E',3);
+insert into songdata(songid,difficulty,rating) values(25,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(25,'H',5.5);
+insert into songdata(songid,difficulty,rating) values(25,'EX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(26,'E',3);
+insert into songdata(songid,difficulty,rating) values(26,'N',4);
+insert into songdata(songid,difficulty,rating) values(26,'H',5);
+insert into songdata(songid,difficulty,rating) values(26,'EX',7);
+insert into songdata(songid,difficulty,rating) values(26,'EXEX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(27,'E',2);
+insert into songdata(songid,difficulty,rating) values(27,'N',4);
+insert into songdata(songid,difficulty,rating) values(27,'H',6);
+insert into songdata(songid,difficulty,rating) values(27,'EX',9.5);
+insert into songdata(songid,difficulty,rating) values(27,'EXEX',9);
+
+insert into songdata(songid,difficulty,rating) values(28,'E',3.5);
+insert into songdata(songid,difficulty,rating) values(28,'N',5);
+insert into songdata(songid,difficulty,rating) values(28,'H',6);
+insert into songdata(songid,difficulty,rating) values(28,'EX',8);
+insert into songdata(songid,difficulty,rating) values(28,'EXEX',8);
+
+insert into songdata(songid,difficulty,rating) values(29,'E',3);
+insert into songdata(songid,difficulty,rating) values(29,'N',6);
+insert into songdata(songid,difficulty,rating) values(29,'H',8);
+insert into songdata(songid,difficulty,rating) values(29,'EX',10);
+insert into songdata(songid,difficulty,rating) values(29,'EXEX',10);
+
+insert into songdata(songid,difficulty,rating) values(30,'N',5);
+insert into songdata(songid,difficulty,rating) values(30,'H',6);
+insert into songdata(songid,difficulty,rating) values(30,'EX',7);
+insert into songdata(songid,difficulty,rating) values(30,'EXEX',8);
+
+insert into songdata(songid,difficulty,rating) values(31,'E',3.5);
+insert into songdata(songid,difficulty,rating) values(31,'N',5);
+insert into songdata(songid,difficulty,rating) values(31,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(31,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(32,'E',2);
+insert into songdata(songid,difficulty,rating) values(32,'N',4);
+insert into songdata(songid,difficulty,rating) values(32,'H',5);
+insert into songdata(songid,difficulty,rating) values(32,'EX',8);
+insert into songdata(songid,difficulty,rating) values(32,'EXEX',9);
+
+insert into songdata(songid,difficulty,rating) values(33,'E',3.5);
+insert into songdata(songid,difficulty,rating) values(33,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(33,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(33,'EX',8);
+insert into songdata(songid,difficulty,rating) values(33,'EXEX',9);
+
+insert into songdata(songid,difficulty,rating) values(34,'E',3);
+insert into songdata(songid,difficulty,rating) values(34,'N',4);
+insert into songdata(songid,difficulty,rating) values(34,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(34,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(35,'N',4);
+insert into songdata(songid,difficulty,rating) values(35,'H',7);
+insert into songdata(songid,difficulty,rating) values(35,'EX',10);
+insert into songdata(songid,difficulty,rating) values(35,'EXEX',10);
+
+insert into songdata(songid,difficulty,rating) values(36,'N',5);
+insert into songdata(songid,difficulty,rating) values(36,'H',6);
+insert into songdata(songid,difficulty,rating) values(36,'EX',9);
+insert into songdata(songid,difficulty,rating) values(36,'EXEX',9.5);
+
+insert into songdata(songid,difficulty,rating) values(37,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(37,'H',6);
+insert into songdata(songid,difficulty,rating) values(37,'EX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(38,'N',5);
+insert into songdata(songid,difficulty,rating) values(38,'H',6);
+insert into songdata(songid,difficulty,rating) values(38,'EX',8);
+insert into songdata(songid,difficulty,rating) values(38,'EXEX',8);
+
+insert into songdata(songid,difficulty,rating) values(39,'E',2);
+insert into songdata(songid,difficulty,rating) values(39,'N',4);
+insert into songdata(songid,difficulty,rating) values(39,'H',5);
+insert into songdata(songid,difficulty,rating) values(39,'EX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(40,'E',2);
+insert into songdata(songid,difficulty,rating) values(40,'N',4);
+insert into songdata(songid,difficulty,rating) values(40,'H',5);
+insert into songdata(songid,difficulty,rating) values(40,'EX',7);
+insert into songdata(songid,difficulty,rating) values(40,'EXEX',8);
+
+insert into songdata(songid,difficulty,rating) values(41,'E',3);
+insert into songdata(songid,difficulty,rating) values(41,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(41,'H',6.4);
+insert into songdata(songid,difficulty,rating) values(41,'EX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(42,'E',2.5);
+insert into songdata(songid,difficulty,rating) values(42,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(42,'H',6);
+insert into songdata(songid,difficulty,rating) values(42,'EX',8);
+insert into songdata(songid,difficulty,rating) values(42,'EXEX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(43,'N',5.5);
+insert into songdata(songid,difficulty,rating) values(43,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(43,'EX',9);
+
+insert into songdata(songid,difficulty,rating) values(44,'E',3);
+insert into songdata(songid,difficulty,rating) values(44,'N',4);
+insert into songdata(songid,difficulty,rating) values(44,'H',5.5);
+insert into songdata(songid,difficulty,rating) values(44,'EX',8);
+insert into songdata(songid,difficulty,rating) values(44,'EXEX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(45,'E',2);
+insert into songdata(songid,difficulty,rating) values(45,'N',3.5);
+insert into songdata(songid,difficulty,rating) values(45,'H',5);
+insert into songdata(songid,difficulty,rating) values(45,'EX',7);
+
+insert into songdata(songid,difficulty,rating) values(46,'E',1);
+insert into songdata(songid,difficulty,rating) values(46,'N',3);
+insert into songdata(songid,difficulty,rating) values(46,'H',5);
+insert into songdata(songid,difficulty,rating) values(46,'EX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(47,'N',4);
+insert into songdata(songid,difficulty,rating) values(47,'H',6);
+insert into songdata(songid,difficulty,rating) values(47,'EX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(48,'E',3);
+insert into songdata(songid,difficulty,rating) values(48,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(48,'H',6);
+insert into songdata(songid,difficulty,rating) values(48,'EX',7.5);
+insert into songdata(songid,difficulty,rating) values(48,'EXEX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(49,'E',3.5);
+insert into songdata(songid,difficulty,rating) values(49,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(49,'H',6);
+insert into songdata(songid,difficulty,rating) values(49,'EX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(50,'E',2);
+insert into songdata(songid,difficulty,rating) values(50,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(50,'H',6);
+insert into songdata(songid,difficulty,rating) values(50,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(51,'E',3.5);
+insert into songdata(songid,difficulty,rating) values(51,'N',5);
+insert into songdata(songid,difficulty,rating) values(51,'H',6);
+insert into songdata(songid,difficulty,rating) values(51,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(52,'E',3);
+insert into songdata(songid,difficulty,rating) values(52,'N',5);
+insert into songdata(songid,difficulty,rating) values(52,'H',6);
+insert into songdata(songid,difficulty,rating) values(52,'EX',7);
+
+insert into songdata(songid,difficulty,rating) values(53,'E',3);
+insert into songdata(songid,difficulty,rating) values(53,'N',4);
+insert into songdata(songid,difficulty,rating) values(53,'H',5);
+insert into songdata(songid,difficulty,rating) values(53,'EX',7);
+
+insert into songdata(songid,difficulty,rating) values(54,'E',3);
+insert into songdata(songid,difficulty,rating) values(54,'N',5);
+insert into songdata(songid,difficulty,rating) values(54,'H',7);
+insert into songdata(songid,difficulty,rating) values(54,'EX',10);
+insert into songdata(songid,difficulty,rating) values(54,'EXEX',10);
+
+insert into songdata(songid,difficulty,rating) values(55,'N',5);
+insert into songdata(songid,difficulty,rating) values(55,'H',6);
+insert into songdata(songid,difficulty,rating) values(55,'EX',8);
+insert into songdata(songid,difficulty,rating) values(55,'EXEX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(56,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(56,'H',6);
+insert into songdata(songid,difficulty,rating) values(56,'EX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(57,'E',3);
+insert into songdata(songid,difficulty,rating) values(57,'N',5.5);
+insert into songdata(songid,difficulty,rating) values(57,'H',7);
+insert into songdata(songid,difficulty,rating) values(57,'EX',9);
+insert into songdata(songid,difficulty,rating) values(57,'EXEX',9.5);
+
+insert into songdata(songid,difficulty,rating) values(58,'N',5.5);
+insert into songdata(songid,difficulty,rating) values(58,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(58,'EX',8.5);
+insert into songdata(songid,difficulty,rating) values(58,'EXEX',9);
+
+insert into songdata(songid,difficulty,rating) values(59,'N',4);
+insert into songdata(songid,difficulty,rating) values(59,'H',6);
+insert into songdata(songid,difficulty,rating) values(59,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(60,'E',2);
+insert into songdata(songid,difficulty,rating) values(60,'N',4);
+insert into songdata(songid,difficulty,rating) values(60,'H',6);
+insert into songdata(songid,difficulty,rating) values(60,'EX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(61,'E',3);
+insert into songdata(songid,difficulty,rating) values(61,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(61,'H',7.5);
+insert into songdata(songid,difficulty,rating) values(61,'EX',10);
+
+insert into songdata(songid,difficulty,rating) values(62,'E',1);
+insert into songdata(songid,difficulty,rating) values(62,'N',3);
+insert into songdata(songid,difficulty,rating) values(62,'H',5);
+insert into songdata(songid,difficulty,rating) values(62,'EX',6.5);
+insert into songdata(songid,difficulty,rating) values(62,'EXEX',8);
+
+insert into songdata(songid,difficulty,rating) values(63,'E',0);
+insert into songdata(songid,difficulty,rating) values(63,'N',0);
+insert into songdata(songid,difficulty,rating) values(63,'H',0);
+insert into songdata(songid,difficulty,rating) values(63,'EX',0);
+insert into songdata(songid,difficulty,rating) values(63,'EXEX',0);
+
+insert into songdata(songid,difficulty,rating) values(64,'N',5);
+insert into songdata(songid,difficulty,rating) values(64,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(64,'EX',8);
+insert into songdata(songid,difficulty,rating) values(64,'EXEX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(65,'E',2.5);
+insert into songdata(songid,difficulty,rating) values(65,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(65,'H',7.5);
+insert into songdata(songid,difficulty,rating) values(65,'EX',9.5);
+
+insert into songdata(songid,difficulty,rating) values(66,'E',1);
+insert into songdata(songid,difficulty,rating) values(66,'N',3.5);
+insert into songdata(songid,difficulty,rating) values(66,'H',6);
+insert into songdata(songid,difficulty,rating) values(66,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(67,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(67,'H',6);
+insert into songdata(songid,difficulty,rating) values(67,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(68,'E',2.5);
+insert into songdata(songid,difficulty,rating) values(68,'N',3.5);
+insert into songdata(songid,difficulty,rating) values(68,'H',5.5);
+insert into songdata(songid,difficulty,rating) values(68,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(69,'E',2);
+insert into songdata(songid,difficulty,rating) values(69,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(69,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(69,'EX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(70,'E',2);
+insert into songdata(songid,difficulty,rating) values(70,'N',4);
+insert into songdata(songid,difficulty,rating) values(70,'H',5);
+insert into songdata(songid,difficulty,rating) values(70,'EX',7);
+
+insert into songdata(songid,difficulty,rating) values(71,'E',2);
+insert into songdata(songid,difficulty,rating) values(71,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(71,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(71,'EX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(72,'E',1.5);
+insert into songdata(songid,difficulty,rating) values(72,'N',4);
+insert into songdata(songid,difficulty,rating) values(72,'H',5.5);
+insert into songdata(songid,difficulty,rating) values(72,'EX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(73,'E',1.5);
+insert into songdata(songid,difficulty,rating) values(73,'N',4);
+insert into songdata(songid,difficulty,rating) values(73,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(73,'EX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(74,'E',3.5);
+insert into songdata(songid,difficulty,rating) values(74,'N',6);
+insert into songdata(songid,difficulty,rating) values(74,'H',8);
+insert into songdata(songid,difficulty,rating) values(74,'EX',9.5);
+
+insert into songdata(songid,difficulty,rating) values(75,'E',1.5);
+insert into songdata(songid,difficulty,rating) values(75,'N',3.5);
+insert into songdata(songid,difficulty,rating) values(75,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(75,'EX',9);
+
+insert into songdata(songid,difficulty,rating) values(76,'E',2);
+insert into songdata(songid,difficulty,rating) values(76,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(76,'H',6);
+insert into songdata(songid,difficulty,rating) values(76,'EX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(77,'E',4);
+insert into songdata(songid,difficulty,rating) values(77,'N',5.5);
+insert into songdata(songid,difficulty,rating) values(77,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(77,'EX',9.5);
+
+insert into songdata(songid,difficulty,rating) values(78,'E',2.5);
+insert into songdata(songid,difficulty,rating) values(78,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(78,'H',6);
+insert into songdata(songid,difficulty,rating) values(78,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(79,'E',3);
+insert into songdata(songid,difficulty,rating) values(79,'N',5.5);
+insert into songdata(songid,difficulty,rating) values(79,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(79,'EX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(80,'E',2.5);
+insert into songdata(songid,difficulty,rating) values(80,'N',4);
+insert into songdata(songid,difficulty,rating) values(80,'H',6);
+insert into songdata(songid,difficulty,rating) values(80,'EX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(81,'E',2);
+insert into songdata(songid,difficulty,rating) values(81,'N',4);
+insert into songdata(songid,difficulty,rating) values(81,'H',5.5);
+insert into songdata(songid,difficulty,rating) values(81,'EX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(82,'E',1.5);
+insert into songdata(songid,difficulty,rating) values(82,'N',4);
+insert into songdata(songid,difficulty,rating) values(82,'H',6);
+insert into songdata(songid,difficulty,rating) values(82,'EX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(83,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(83,'H',7.5);
+insert into songdata(songid,difficulty,rating) values(83,'EX',9.5);
+
+insert into songdata(songid,difficulty,rating) values(84,'E',2.5);
+insert into songdata(songid,difficulty,rating) values(84,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(84,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(84,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(85,'E',4);
+insert into songdata(songid,difficulty,rating) values(85,'N',5.5);
+insert into songdata(songid,difficulty,rating) values(85,'H',7);
+insert into songdata(songid,difficulty,rating) values(85,'EX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(86,'E',3.5);
+insert into songdata(songid,difficulty,rating) values(86,'N',5);
+insert into songdata(songid,difficulty,rating) values(86,'H',7);
+insert into songdata(songid,difficulty,rating) values(86,'EX',9);
+
+insert into songdata(songid,difficulty,rating) values(87,'E',3.5);
+insert into songdata(songid,difficulty,rating) values(87,'N',4);
+insert into songdata(songid,difficulty,rating) values(87,'H',6);
+insert into songdata(songid,difficulty,rating) values(87,'EX',8);
+insert into songdata(songid,difficulty,rating) values(87,'EXEX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(88,'E',1);
+insert into songdata(songid,difficulty,rating) values(88,'N',3);
+insert into songdata(songid,difficulty,rating) values(88,'H',5.5);
+insert into songdata(songid,difficulty,rating) values(88,'EX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(89,'E',2.5);
+insert into songdata(songid,difficulty,rating) values(89,'N',5);
+insert into songdata(songid,difficulty,rating) values(89,'H',6);
+insert into songdata(songid,difficulty,rating) values(89,'EX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(90,'E',2);
+insert into songdata(songid,difficulty,rating) values(90,'N',4);
+insert into songdata(songid,difficulty,rating) values(90,'H',6);
+insert into songdata(songid,difficulty,rating) values(90,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(91,'E',4);
+insert into songdata(songid,difficulty,rating) values(91,'N',6);
+insert into songdata(songid,difficulty,rating) values(91,'H',7.5);
+insert into songdata(songid,difficulty,rating) values(91,'EX',9.5);
+
+insert into songdata(songid,difficulty,rating) values(92,'E',3.5);
+insert into songdata(songid,difficulty,rating) values(92,'N',4);
+insert into songdata(songid,difficulty,rating) values(92,'H',5.5);
+insert into songdata(songid,difficulty,rating) values(92,'EX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(93,'E',4);
+insert into songdata(songid,difficulty,rating) values(93,'N',6);
+insert into songdata(songid,difficulty,rating) values(93,'H',7.5);
+insert into songdata(songid,difficulty,rating) values(93,'EX',10);
+
+insert into songdata(songid,difficulty,rating) values(94,'E',3);
+insert into songdata(songid,difficulty,rating) values(94,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(94,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(94,'EX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(95,'E',1);
+insert into songdata(songid,difficulty,rating) values(95,'N',3);
+insert into songdata(songid,difficulty,rating) values(95,'H',5);
+insert into songdata(songid,difficulty,rating) values(95,'EX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(96,'N',5.5);
+insert into songdata(songid,difficulty,rating) values(96,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(96,'EX',7.5);
+insert into songdata(songid,difficulty,rating) values(96,'EXEX',8);
+
+insert into songdata(songid,difficulty,rating) values(97,'E',4);
+insert into songdata(songid,difficulty,rating) values(97,'N',5);
+insert into songdata(songid,difficulty,rating) values(97,'H',6);
+insert into songdata(songid,difficulty,rating) values(97,'EX',7);
+insert into songdata(songid,difficulty,rating) values(97,'EXEX',8);
+
+insert into songdata(songid,difficulty,rating) values(98,'N',5.5);
+insert into songdata(songid,difficulty,rating) values(98,'H',7.5);
+insert into songdata(songid,difficulty,rating) values(98,'EX',8.5);
+insert into songdata(songid,difficulty,rating) values(98,'EXEX',9.5);
+
+insert into songdata(songid,difficulty,rating) values(99,'E',2);
+insert into songdata(songid,difficulty,rating) values(99,'N',4);
+insert into songdata(songid,difficulty,rating) values(99,'H',6);
+insert into songdata(songid,difficulty,rating) values(99,'EX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(100,'E',3.5);
+insert into songdata(songid,difficulty,rating) values(100,'N',5.5);
+insert into songdata(songid,difficulty,rating) values(100,'H',7.5);
+insert into songdata(songid,difficulty,rating) values(100,'EX',9);
+
+insert into songdata(songid,difficulty,rating) values(101,'E',3);
+insert into songdata(songid,difficulty,rating) values(101,'N',5.5);
+insert into songdata(songid,difficulty,rating) values(101,'H',7);
+insert into songdata(songid,difficulty,rating) values(101,'EX',9);
+
+insert into songdata(songid,difficulty,rating) values(102,'E',2);
+insert into songdata(songid,difficulty,rating) values(102,'N',4);
+insert into songdata(songid,difficulty,rating) values(102,'H',5);
+insert into songdata(songid,difficulty,rating) values(102,'EX',6);
+
+insert into songdata(songid,difficulty,rating) values(103,'E',4);
+insert into songdata(songid,difficulty,rating) values(103,'N',5.5);
+insert into songdata(songid,difficulty,rating) values(103,'H',6);
+insert into songdata(songid,difficulty,rating) values(103,'EX',8.5);
+insert into songdata(songid,difficulty,rating) values(103,'EXEX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(104,'E',3);
+insert into songdata(songid,difficulty,rating) values(104,'N',4);
+insert into songdata(songid,difficulty,rating) values(104,'H',5);
+insert into songdata(songid,difficulty,rating) values(104,'EX',7);
+insert into songdata(songid,difficulty,rating) values(104,'EXEX',8);
+
+insert into songdata(songid,difficulty,rating) values(105,'E',3);
+insert into songdata(songid,difficulty,rating) values(105,'N',5);
+insert into songdata(songid,difficulty,rating) values(105,'H',6);
+insert into songdata(songid,difficulty,rating) values(105,'EX',7);
+insert into songdata(songid,difficulty,rating) values(105,'EXEX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(106,'N',4);
+insert into songdata(songid,difficulty,rating) values(106,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(106,'EX',8);
+insert into songdata(songid,difficulty,rating) values(106,'EXEX',9);
+
+insert into songdata(songid,difficulty,rating) values(107,'E',3);
+insert into songdata(songid,difficulty,rating) values(107,'N',4);
+insert into songdata(songid,difficulty,rating) values(107,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(107,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(108,'E',3);
+insert into songdata(songid,difficulty,rating) values(108,'N',4);
+insert into songdata(songid,difficulty,rating) values(108,'H',5);
+insert into songdata(songid,difficulty,rating) values(108,'EX',8);
+insert into songdata(songid,difficulty,rating) values(108,'EXEX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(109,'E',3);
+insert into songdata(songid,difficulty,rating) values(109,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(109,'H',6);
+insert into songdata(songid,difficulty,rating) values(109,'EX',7);
+insert into songdata(songid,difficulty,rating) values(109,'EXEX',8);
+
+insert into songdata(songid,difficulty,rating) values(110,'E',1);
+insert into songdata(songid,difficulty,rating) values(110,'N',3);
+insert into songdata(songid,difficulty,rating) values(110,'H',5);
+insert into songdata(songid,difficulty,rating) values(110,'EX',8);
+insert into songdata(songid,difficulty,rating) values(110,'EXEX',9);
+
+insert into songdata(songid,difficulty,rating) values(111,'E',2.5);
+insert into songdata(songid,difficulty,rating) values(111,'N',4);
+insert into songdata(songid,difficulty,rating) values(111,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(111,'EX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(112,'E',4);
+insert into songdata(songid,difficulty,rating) values(112,'N',5);
+insert into songdata(songid,difficulty,rating) values(112,'H',6);
+insert into songdata(songid,difficulty,rating) values(112,'EX',7);
+insert into songdata(songid,difficulty,rating) values(112,'EXEX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(113,'N',4);
+insert into songdata(songid,difficulty,rating) values(113,'H',6);
+insert into songdata(songid,difficulty,rating) values(113,'EX',9);
+insert into songdata(songid,difficulty,rating) values(113,'EXEX',9.5);
+
+insert into songdata(songid,difficulty,rating) values(114,'N',5.5);
+insert into songdata(songid,difficulty,rating) values(114,'H',8);
+insert into songdata(songid,difficulty,rating) values(114,'EX',10);
+insert into songdata(songid,difficulty,rating) values(114,'EXEX',10);
+
+insert into songdata(songid,difficulty,rating) values(115,'N',5);
+insert into songdata(songid,difficulty,rating) values(115,'H',6);
+insert into songdata(songid,difficulty,rating) values(115,'EX',9);
+insert into songdata(songid,difficulty,rating) values(115,'EXEX',9.5);
+
+insert into songdata(songid,difficulty,rating) values(116,'E',2.5);
+insert into songdata(songid,difficulty,rating) values(116,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(116,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(116,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(117,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(117,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(117,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(118,'E',3.5);
+insert into songdata(songid,difficulty,rating) values(118,'N',5);
+insert into songdata(songid,difficulty,rating) values(118,'H',7);
+insert into songdata(songid,difficulty,rating) values(118,'EX',8.5);
+insert into songdata(songid,difficulty,rating) values(118,'EXEX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(119,'E',2);
+insert into songdata(songid,difficulty,rating) values(119,'H',4.5);
+insert into songdata(songid,difficulty,rating) values(119,'EX',7);
+insert into songdata(songid,difficulty,rating) values(119,'EXEX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(120,'E',3);
+insert into songdata(songid,difficulty,rating) values(120,'N',4);
+insert into songdata(songid,difficulty,rating) values(120,'H',5);
+insert into songdata(songid,difficulty,rating) values(120,'EX',7);
+insert into songdata(songid,difficulty,rating) values(120,'EXEX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(121,'E',2.5);
+insert into songdata(songid,difficulty,rating) values(121,'N',3.5);
+insert into songdata(songid,difficulty,rating) values(121,'H',6);
+insert into songdata(songid,difficulty,rating) values(121,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(122,'E',2);
+insert into songdata(songid,difficulty,rating) values(122,'N',4);
+insert into songdata(songid,difficulty,rating) values(122,'H',5);
+insert into songdata(songid,difficulty,rating) values(122,'EX',7);
+insert into songdata(songid,difficulty,rating) values(122,'EXEX',8);
+
+insert into songdata(songid,difficulty,rating) values(123,'N',4);
+insert into songdata(songid,difficulty,rating) values(123,'H',6);
+insert into songdata(songid,difficulty,rating) values(123,'EX',8);
+insert into songdata(songid,difficulty,rating) values(123,'EXEX',8);
+
+insert into songdata(songid,difficulty,rating) values(124,'E',2);
+insert into songdata(songid,difficulty,rating) values(124,'N',4);
+insert into songdata(songid,difficulty,rating) values(124,'H',6);
+insert into songdata(songid,difficulty,rating) values(124,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(125,'E',2.5);
+insert into songdata(songid,difficulty,rating) values(125,'H',5);
+insert into songdata(songid,difficulty,rating) values(125,'EX',7);
+insert into songdata(songid,difficulty,rating) values(125,'EXEX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(126,'E',2.5);
+insert into songdata(songid,difficulty,rating) values(126,'N',4);
+insert into songdata(songid,difficulty,rating) values(126,'H',5);
+insert into songdata(songid,difficulty,rating) values(126,'EX',7);
+
+insert into songdata(songid,difficulty,rating) values(127,'E',2);
+insert into songdata(songid,difficulty,rating) values(127,'N',4);
+insert into songdata(songid,difficulty,rating) values(127,'H',5);
+insert into songdata(songid,difficulty,rating) values(127,'EX',6);
+insert into songdata(songid,difficulty,rating) values(127,'EXEX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(128,'N',6);
+insert into songdata(songid,difficulty,rating) values(128,'H',8);
+insert into songdata(songid,difficulty,rating) values(128,'EX',10);
+
+insert into songdata(songid,difficulty,rating) values(129,'N',4);
+insert into songdata(songid,difficulty,rating) values(129,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(129,'EX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(130,'E',3);
+insert into songdata(songid,difficulty,rating) values(130,'N',4);
+insert into songdata(songid,difficulty,rating) values(130,'H',5);
+insert into songdata(songid,difficulty,rating) values(130,'EX',7);
+insert into songdata(songid,difficulty,rating) values(130,'EXEX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(131,'E',3.5);
+insert into songdata(songid,difficulty,rating) values(131,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(131,'H',5.5);
+insert into songdata(songid,difficulty,rating) values(131,'EX',7.5);
+insert into songdata(songid,difficulty,rating) values(131,'EXEX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(132,'E',3);
+insert into songdata(songid,difficulty,rating) values(132,'N',4);
+insert into songdata(songid,difficulty,rating) values(132,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(132,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(133,'E',2);
+insert into songdata(songid,difficulty,rating) values(133,'N',4);
+insert into songdata(songid,difficulty,rating) values(133,'H',5);
+insert into songdata(songid,difficulty,rating) values(133,'EX',7);
+insert into songdata(songid,difficulty,rating) values(133,'EXEX',7.5);
+
+insert into songdata(songid,difficulty,rating) values(134,'E',2);
+insert into songdata(songid,difficulty,rating) values(134,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(134,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(134,'EX',9);
+
+insert into songdata(songid,difficulty,rating) values(135,'E',3);
+insert into songdata(songid,difficulty,rating) values(135,'N',4);
+insert into songdata(songid,difficulty,rating) values(135,'H',5);
+insert into songdata(songid,difficulty,rating) values(135,'EX',7);
+insert into songdata(songid,difficulty,rating) values(135,'EXEX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(136,'E',3);
+insert into songdata(songid,difficulty,rating) values(136,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(136,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(136,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(137,'E',3);
+insert into songdata(songid,difficulty,rating) values(137,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(137,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(137,'EX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(138,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(138,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(138,'EX',8.5);
+
+insert into songdata(songid,difficulty,rating) values(139,'E',2);
+insert into songdata(songid,difficulty,rating) values(139,'N',3);
+insert into songdata(songid,difficulty,rating) values(139,'H',4);
+insert into songdata(songid,difficulty,rating) values(139,'EX',7);
+insert into songdata(songid,difficulty,rating) values(139,'EXEX',8);
+
+insert into songdata(songid,difficulty,rating) values(140,'E',2);
+insert into songdata(songid,difficulty,rating) values(140,'N',4);
+insert into songdata(songid,difficulty,rating) values(140,'H',6.5);
+insert into songdata(songid,difficulty,rating) values(140,'EX',8);
+
+insert into songdata(songid,difficulty,rating) values(141,'E',1.5);
+insert into songdata(songid,difficulty,rating) values(141,'N',4.5);
+insert into songdata(songid,difficulty,rating) values(141,'H',7);
+insert into songdata(songid,difficulty,rating) values(141,'EX',8.5);
\ No newline at end of file