避免重复查库;DISTICT查出来后通过代码去重
This commit is contained in:
		@@ -38,7 +38,9 @@ async function fetchAll({ args = {}, isUpdate = false }) {
 | 
			
		||||
            args.max ? `album_id <= ${args.max}` : '1=1',
 | 
			
		||||
        ].join(' AND ');
 | 
			
		||||
        var sql = `
 | 
			
		||||
            SELECT DISTINCT album_id FROM song_album_relation WHERE ${whereClause} AND album_id NOT IN ( SELECT album_id FROM album )
 | 
			
		||||
            -- 查出来通过代码去重,提高速度
 | 
			
		||||
            -- SELECT DISTINCT album_id FROM song_album_relation WHERE ${whereClause} AND album_id NOT IN ( SELECT album_id FROM album )
 | 
			
		||||
            SELECT album_id FROM song_album_relation WHERE ${whereClause} AND album_id NOT IN ( SELECT album_id FROM album )
 | 
			
		||||
            ${args.limit ? `LIMIT ${args.limit}` : ''}
 | 
			
		||||
        `;
 | 
			
		||||
        console.log(sql);
 | 
			
		||||
@@ -46,6 +48,7 @@ async function fetchAll({ args = {}, isUpdate = false }) {
 | 
			
		||||
 | 
			
		||||
    var albumIds = await dbUtils.query(sql, []);
 | 
			
		||||
    albumIds = albumIds.map(item => item.album_id);
 | 
			
		||||
    albumIds = Array.from(new Set(albumIds));
 | 
			
		||||
    for (let i = 0; i < albumIds.length; i++) {
 | 
			
		||||
        await global.checkIsExit();
 | 
			
		||||
        const albumId = albumIds[i];
 | 
			
		||||
@@ -155,15 +158,12 @@ async function fetch({ albumId, debug = false, update = false }) {
 | 
			
		||||
        songIds: songIds,
 | 
			
		||||
    };
 | 
			
		||||
    // console.log("albumInfo", albumInfo);
 | 
			
		||||
    songIds.forEach(function (songId) {
 | 
			
		||||
        if (isNaN(Number(songId)) || Number(songId) === 0 || isNaN(Number(albumId)) || Number(songId) === 0)
 | 
			
		||||
            return;
 | 
			
		||||
        dbUtils.query('INSERT IGNORE INTO song_album_relation SET ?', {
 | 
			
		||||
            song_id: songId,
 | 
			
		||||
            album_id: albumId,
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
    dbUtils.query(update ? `UPDATE album SET ? WHERE album_id = ${albumId}` : 'INSERT IGNORE INTO album SET ?', {
 | 
			
		||||
    if (albumId > 0) {
 | 
			
		||||
        await dbUtils.query(`
 | 
			
		||||
            INSERT IGNORE INTO song_album_relation (song_id, album_id) VALUES ?
 | 
			
		||||
        `, [songIds.map(songId => [Number(songId), albumId])]);
 | 
			
		||||
    }
 | 
			
		||||
    await dbUtils.query(update ? `UPDATE album SET ? WHERE album_id = ${albumId}` : 'INSERT IGNORE INTO album SET ?', {
 | 
			
		||||
        album_id: albumInfo.albumId,
 | 
			
		||||
        title: albumInfo.title,
 | 
			
		||||
        description: albumInfo.description,
 | 
			
		||||
 
 | 
			
		||||
@@ -30,13 +30,16 @@ async function fetchAll({ args = {} }) {
 | 
			
		||||
        args.max ? `artist_id <= ${args.max}` : '1=1',
 | 
			
		||||
    ].join(' AND ');
 | 
			
		||||
    var sql = `
 | 
			
		||||
        SELECT DISTINCT artist_id FROM song_artist_relation WHERE ${whereClause} AND artist_id NOT IN ( SELECT artist_id FROM artist )
 | 
			
		||||
        -- 查出来通过代码去重,提高速度
 | 
			
		||||
        -- SELECT DISTINCT artist_id FROM song_artist_relation WHERE ${whereClause} AND artist_id NOT IN ( SELECT artist_id FROM artist )
 | 
			
		||||
        SELECT artist_id FROM song_artist_relation WHERE ${whereClause} AND artist_id NOT IN ( SELECT artist_id FROM artist )
 | 
			
		||||
        ${args.limit ? `LIMIT ${args.limit}` : ''}
 | 
			
		||||
    `;
 | 
			
		||||
    console.log(sql);
 | 
			
		||||
 | 
			
		||||
    var artistIds = await dbUtils.query(sql, []);
 | 
			
		||||
    artistIds = artistIds.map(item => item.artist_id);
 | 
			
		||||
    artistIds = Array.from(new Set(artistIds));
 | 
			
		||||
    for (let i = 0; i < artistIds.length; i++) {
 | 
			
		||||
        await global.checkIsExit();
 | 
			
		||||
        const artistId = artistIds[i];
 | 
			
		||||
@@ -107,14 +110,11 @@ async function fetch({ artistId, debug = false }) {
 | 
			
		||||
        songIds: songIds,
 | 
			
		||||
    };
 | 
			
		||||
    // console.log("artistInfo", artistInfo);
 | 
			
		||||
    songIds.forEach(function (songId) {
 | 
			
		||||
        if (isNaN(Number(songId)) || Number(songId) === 0 || isNaN(Number(artistId)) || Number(artistId) === 0)
 | 
			
		||||
            return;
 | 
			
		||||
        dbUtils.query('INSERT IGNORE INTO song_artist_relation SET ?', {
 | 
			
		||||
            song_id: songId,
 | 
			
		||||
            artist_id: artistId,
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
    if (artistId > 0) {
 | 
			
		||||
        await dbUtils.query(`
 | 
			
		||||
            INSERT IGNORE INTO song_artist_relation (song_id, artist_id) VALUES ?
 | 
			
		||||
        `, [songIds.map(songId => [Number(songId), artistId])]);
 | 
			
		||||
    }
 | 
			
		||||
    dbUtils.query('INSERT IGNORE INTO artist SET ?', {
 | 
			
		||||
        artist_id: artistInfo.artistId,
 | 
			
		||||
        title: artistInfo.title,
 | 
			
		||||
 
 | 
			
		||||
@@ -63,6 +63,7 @@ async function fetch({ songId, debug = false }) {
 | 
			
		||||
 | 
			
		||||
    if (typeof lyric == "undefined") {
 | 
			
		||||
        // 这首歌爬song的时候还在,但是现在不在了
 | 
			
		||||
        // 这里数据丢了不要紧,所以不加await
 | 
			
		||||
        dbUtils.query('INSERT IGNORE INTO lyric SET ?', {
 | 
			
		||||
            song_id: songId,
 | 
			
		||||
            lyric: '',
 | 
			
		||||
@@ -77,6 +78,7 @@ async function fetch({ songId, debug = false }) {
 | 
			
		||||
        version: lyric.version,
 | 
			
		||||
    };
 | 
			
		||||
    // console.log("lyricInfo", lyricInfo);
 | 
			
		||||
    // 这里数据丢了不要紧,所以不加await
 | 
			
		||||
    dbUtils.query('INSERT IGNORE INTO lyric SET ?', {
 | 
			
		||||
        song_id: lyricInfo.songId,
 | 
			
		||||
        lyric: lyricInfo.lyric,
 | 
			
		||||
 
 | 
			
		||||
@@ -15,9 +15,9 @@ async function fetchAll({ args = {} }) {
 | 
			
		||||
        args.max ? `song_id <= ${args.max}` : '1=1',
 | 
			
		||||
    ].join(' AND ');
 | 
			
		||||
    var sql = `
 | 
			
		||||
        SELECT DISTINCT song_id FROM song_artist_relation WHERE ${whereClause} AND song_id NOT IN ( SELECT song_id FROM song )
 | 
			
		||||
        SELECT song_id FROM song_artist_relation WHERE ${whereClause} AND song_id NOT IN ( SELECT song_id FROM song )
 | 
			
		||||
        UNION
 | 
			
		||||
        SELECT DISTINCT song_id FROM song_album_relation  WHERE ${whereClause} AND song_id NOT IN ( SELECT song_id FROM song )
 | 
			
		||||
        SELECT song_id FROM song_album_relation  WHERE ${whereClause} AND song_id NOT IN ( SELECT song_id FROM song )
 | 
			
		||||
        ${args.order ? `ORDER BY song_id ${args.order}` : ''}
 | 
			
		||||
        ${args.limit ? `LIMIT ${args.limit}` : ''}
 | 
			
		||||
    `;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user