• 1
  • 15
  • 16
  • 17(current)
  • 18
  • 19
  • 26
[MYSQL] HOW-TO: 5 User XBMC
I guess my MySQL server is not quite as powerful as yours (midrange Synology NAS) Wink
Reply
Is it possible to create a view for 'tvshows' whereby if I remove it from User A.tvshow, then it won't remove it from User B.tvshow? Basically User B would have say 20 shows and only 5 of those would be shown for User A.

Could you create a column in global_tvshows where you can populate if it is "enabled" for User A or User B and then the tvshow view for that User then determines if it shows or not?
Reply
(2017-03-21, 10:39)nulled Wrote: Is it possible to create a view for 'tvshows' whereby if I remove it from User A.tvshow, then it won't remove it from User B.tvshow? Basically User B would have say 20 shows and only 5 of those would be shown for User A.

Could you create a column in global_tvshows where you can populate if it is "enabled" for User A or User B and then the tvshow view for that User then determines if it shows or not?

Not that I know of as this is only tweaking the DB to allow more then one user to view all the same data.

You can tho create smart playlists to do this;
EG:
Store shows something like
- TV Shows
- UserA
- Show 1
- Show 3
- UserB
- Show 4
- Show 5
- AllUser
- Show 2

UserA:
In the smart playlist use the rule path "start with" (or something like that)
smb:\\loot\TV Shows\UserA
smb:\\loot\TV Shows\AllUser

Still have the shows added into Kodi at the TV Shows level

Then change your TV Shows link in Kodi to point to your new playlist (Not all skins support this)

Or if it about having too many shows in your TV List use the in-progress list (Which is what I do as my TV list has over 650 items in it)

Hope that makes some sence
Reply
So I didn't know a view runs the SQL that created it every time it's accessed (but it makes sense). What I ended up doing was modifying `global_tvshows` with another column called `viewers` that I populate with the values "UserA", "UserB" or "Both".

I dropped the `tvshows` for the particular user's database and recreated it with the SQL

PHP Code:
CREATE VIEW  `tvshow` AS SELECT 
FROM  `a_master_107`.`global_tvshow
WHERE  `viewers` =  "UserA" OR `viewers` =  "Both" 

User A will now only see shows where it's listed in the `global_tvshows`.`viewers` as "UserA" or "Both"
Reply
(2017-03-21, 15:36)nulled Wrote: So I didn't know a view runs the SQL that created it every time it's accessed (but it makes sense). What I ended up doing was modifying `global_tvshows` with another column called `viewers` that I populate with the values "UserA", "UserB" or "Both".

I dropped the `tvshows` for the particular user's database and recreated it with the SQL

PHP Code:
CREATE VIEW  `tvshow` AS SELECT 
FROM  `a_master_107`.`global_tvshow
WHERE  `viewers` =  "UserA" OR `viewers` =  "Both" 

User A will now only see shows where it's listed in the `global_tvshows`.`viewers` as "UserA" or "Both"

Oh yeah that would work, Two things though the "userrating" wont map in that setup unless you are not using "userrating_U01" etc and all the manual work needed to apply the "viewers" field as "tvshow" view is everything a list of all eps
if you don't mind editing the DB all the time Smile

What about editing the "tvshow" view for said user to something like this this;
I have done very little testing
Just means you will need to store the TV Shows in sub folders, Kodi wont care about that as it will merge them all
- UserA
- Both
etc.

'^smb://192.168.0.105/TV_Shows/UserA/|^smb://192.168.0.105/TV_Shows/Both/'
^ means start of line
| mean or
should be easy to get it to work with your setup
PHP Code:
CREATE ALGORITHM=MERGE DEFINER=`KODI_17`@`%SQL SECURITY DEFINER VIEW `Kodi_U04_Video_107`.`tvshow` AS SELECT
      
`Kodi_U01_Video_107`.`global_tvshow`.`idShow` AS `idShow`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c00` AS `c00`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c01` AS `c01`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c02` AS `c02`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c03` AS `c03`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c04` AS `c04`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c05` AS `c05`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c06` AS `c06`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c07` AS `c07`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c08` AS `c08`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c09` AS `c09`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c10` AS `c10`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c11` AS `c11`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c12` AS `c12`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c13` AS `c13`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c14` AS `c14`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c15` AS `c15`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c16` AS `c16`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c17` AS `c17`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c18` AS `c18`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c19` AS `c19`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c20` AS `c20`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c21` AS `c21`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c22` AS `c22`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c23` AS `c23`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`userrating_U04` AS `userrating`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`duration` AS `duration`
    
FROM `Kodi_U01_Video_107`.`global_tvshow`
    
JOIN `Kodi_U04_Video_107`.`tvshowlinkpathON `Kodi_U01_Video_107`.`global_tvshow`.`idShow` = `tvshowlinkpath`.`idShow`
    
JOIN `Kodi_U04_Video_107`.`pathON `tvshowlinkpath`.`idPath` = `path`.`idPath`
    
WHERE `Kodi_U04_Video_107`.`path`.`strPathREGEXP '^smb://192.168.0.105/TV_Shows/UserA/|^smb://192.168.0.105/TV_Shows/Both/'
If it failes can alway put back the default one
PHP Code:
CREATE ALGORITHM=MERGE DEFINER=`KODI_17`@`%SQL SECURITY DEFINER VIEW `Kodi_U04_Video_107`.`tvshow` AS SELECT
      
`Kodi_U01_Video_107`.`global_tvshow`.`idShow` AS `idShow`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c00` AS `c00`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c01` AS `c01`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c02` AS `c02`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c03` AS `c03`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c04` AS `c04`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c05` AS `c05`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c06` AS `c06`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c07` AS `c07`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c08` AS `c08`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c09` AS `c09`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c10` AS `c10`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c11` AS `c11`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c12` AS `c12`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c13` AS `c13`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c14` AS `c14`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c15` AS `c15`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c16` AS `c16`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c17` AS `c17`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c18` AS `c18`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c19` AS `c19`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c20` AS `c20`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c21` AS `c21`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c22` AS `c22`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`c23` AS `c23`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`userrating_U04` AS `userrating`,
      `
Kodi_U01_Video_107`.`global_tvshow`.`duration` AS `duration`
    
FROM `Kodi_U01_Video_107`.`global_tvshow`; 
Reply
It's all good, I don't mind editing the fields the first time. It's a do once thing and if a new show comes up I can easily go through and tag it appropriately. 'global_tvshows' doesn't show every episode for me? It's just the show? 'episodes' has every single ep listed? Anyway it works for me at the moment (and I don't need the user rating) Smile

I wouldn't be able to put the shows in sub folders as my torrent client wouldn't know where to move the shows to haha.
Reply
(2017-03-23, 14:54)nulled Wrote: It's all good, I don't mind editing the fields the first time. It's a do once thing and if a new show comes up I can easily go through and tag it appropriately. 'global_tvshows' doesn't show every episode for me? It's just the show? 'episodes' has every single ep listed? Anyway it works for me at the moment (and I don't need the user rating) Smile

I wouldn't be able to put the shows in sub folders as my torrent client wouldn't know where to move the shows to haha.

haha all good I might be thinking the wrong table, not at home atm to check.
but if it works for you then go for it, at the end of the day it's your setup Smile
Reply
I have been googling for several weeks now.. And tried all kinds of things.. export/import manually via kodi. Tried to export/import database via phpmyadmin on synology.
I'm just not that good at MySQL Wink

What I want :
Is a 100% copy of MyVideos107 to --> f.x Newuser107
So I have 2 independent master libraries.
One for me, and one for my gf.
So we can have different watch status.

I don't care about watch-status for now.. We can deal with that later.
I know I have to scan both libraries manually in the future.

If I copy / export/import myvideos to newuser.
What do I have to change in the "newuser" database, to make it work?

I know I have to change the advancedsettings.xml to <name>Newuser</name>
But the last time I tried that, then when I scanned the MyVideos database. The movies also appeared in the newuser database, just without cover/images.
And you didn't have access to mark it as watched.. Or mark anything "unwatched" for that matter.

Hope someone can help.. I'm all out of ideas.
Reply
Is anyone using this new Kodi 17 multi user database (BigMong's) having issues where the library updates don't actually add new media while logged on to a secondary profile? Huh

I've verified scraper settings multiple times, but only the primary profile will annually add new media to the library. The second profile will go through the update scanning process but nothing will be added. I'd be happy to provide a log if someone thinks it will help but I'm not sure which one would be best in this case.

Also, I noticed that the CPU usage goes through the roof, more than 100% (watching using the top command in Ubuntu / I didn't think that was possible) when browsing through the library (as thumbnails load) as a secondary user. Thumbnails folder is symlinked to master user's thumbnails​ folder on the same solid state drive. Older databases seemed to be OK with this hardware. I guess it could just be my system being old?
Pentium® Dual-Core CPU, E5200 @ 2.50GHz, 4GB DDR2 RAM
Reply
(2016-04-27, 21:26)john_es Wrote:
(2016-03-14, 06:58)BigMong Wrote: Ok here is a working setup for Database Version 99 [aka Jarvis]
Sorry for the delay.

My last post for a Database Version 93

This has only been Tested on a New Setup
I would say it will fail the update

I always start fresh with each update, My users Watch Status and Ratings are keeped in https://trakt.tv

Since the database now has user ratings I have created Global Episode,TV Show, and Movie

In my test on the laptop everything is working, I wont be upgrading my home setup yet (Waiting for something)
Please Note: If your Database login is different to KODI you must change it below
PHP Code:
/*----------
--- PREP ---
----------*/
  /* GLOBAL FILES */
  
RENAME TABLE `Kodi_Test_Matt_Video_99`.`filesTO `Kodi_Test_Matt_Video_99`.`globalfiles`;
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globalfilesCHANGE playCount playCountMatt INT(11);
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globalfilesCHANGE lastPlayed lastPlayedMatt TEXT;
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globalfilesADD playCountMace INT(11AFTER lastPlayedMatt;
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globalfilesADD lastPlayedMace TEXT AFTER playCountMace;
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globalfilesADD playCountKiyana INT(11AFTER lastPlayedMace;
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globalfilesADD lastPlayedKiyana TEXT AFTER playCountKiyana;
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globalfilesADD playCountJaide INT(11AFTER lastPlayedKiyana;
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globalfilesADD lastPlayedJaide TEXT AFTER playCountJaide;

  
CREATE VIEW `Kodi_Test_Matt_Video_99`.`files` AS SELECT
   
`Kodi_Test_Matt_Video_99`.`globalfiles`.`idFile` AS `idFile`,
   `
Kodi_Test_Matt_Video_99`.`globalfiles`.`idPath` AS `idPath`,
   `
Kodi_Test_Matt_Video_99`.`globalfiles`.`strFilename` AS `strFilename`,
   `
Kodi_Test_Matt_Video_99`.`globalfiles`.`playCountMatt` AS `playCount`,
   `
Kodi_Test_Matt_Video_99`.`globalfiles`.`lastPlayedMatt` AS `lastPlayed`,
   `
Kodi_Test_Matt_Video_99`.`globalfiles`.`dateAdded` AS `dateAdded`
  
FROM `Kodi_Test_Matt_Video_99`.`globalfiles`;

  
/* GLOBAL EPISODE */
  
RENAME TABLE `Kodi_Test_Matt_Video_99`.`episodeTO `Kodi_Test_Matt_Video_99`.`globalepisode`;
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globalepisodeCHANGE userrating userratingMatt INT(11);
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globalepisodeADD userratingMace INT(11AFTER userratingMatt;
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globalepisodeADD userratingKiyana INT(11AFTER userratingMace;
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globalepisodeADD userratingJaide INT(11AFTER userratingKiyana;
  
  
CREATE VIEW `Kodi_Test_Matt_Video_99`.`episode` AS SELECT
    
`Kodi_Test_Matt_Video_99`.`globalepisode`.`idEpisode` AS `idEpisode`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`idFile` AS `idFile`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c00` AS `c00`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c01` AS `c01`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c02` AS `c02`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c03` AS `c03`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c04` AS `c04`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c05` AS `c05`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c06` AS `c06`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c07` AS `c07`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c08` AS `c08`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c09` AS `c09`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c10` AS `c10`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c11` AS `c11`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c12` AS `c12`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c13` AS `c13`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c14` AS `c14`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c15` AS `c15`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c16` AS `c16`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c17` AS `c17`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c18` AS `c18`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c19` AS `c19`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c20` AS `c20`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c21` AS `c21`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c22` AS `c22`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c23` AS `c23`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`idShow` AS `idShow`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`userratingMatt` AS `userrating`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`idSeason` AS `idSeason`
  
FROM `Kodi_Test_Matt_Video_99`.`globalepisode`;

  
/* GLOBAL TV SHOW */
  
RENAME TABLE `Kodi_Test_Matt_Video_99`.`tvshowTO `Kodi_Test_Matt_Video_99`.`globaltvshow`;
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globaltvshowCHANGE userrating userratingMatt INT(11);
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globaltvshowADD userratingMace INT(11AFTER userratingMatt;
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globaltvshowADD userratingKiyana INT(11AFTER userratingMace;
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globaltvshowADD userratingJaide INT(11AFTER userratingKiyana;

  
CREATE VIEW `Kodi_Test_Matt_Video_99`.`tvshow` AS SELECT 
    
`Kodi_Test_Matt_Video_99`.`globaltvshow`.`idShow` AS `idShow`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c00` AS `c00`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c01` AS `c01`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c02` AS `c02`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c03` AS `c03`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c04` AS `c04`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c05` AS `c05`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c06` AS `c06`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c07` AS `c07`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c08` AS `c08`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c09` AS `c09`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c10` AS `c10`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c11` AS `c11`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c12` AS `c12`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c13` AS `c13`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c14` AS `c14`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c15` AS `c15`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c16` AS `c16`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c17` AS `c17`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c18` AS `c18`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c19` AS `c19`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c20` AS `c20`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c21` AS `c21`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c22` AS `c22`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c23` AS `c23`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`userratingMatt` AS `userrating`
  
FROM `Kodi_Test_Matt_Video_99`.`globaltvshow`;

  
/* GLOBAL MOVIE */
  
RENAME TABLE `Kodi_Test_Matt_Video_99`.`movieTO `Kodi_Test_Matt_Video_99`.`globalmovie`;
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globalmovieCHANGE userrating userratingMatt INT(11);
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globalmovieADD userratingMace INT(11AFTER userratingMatt;
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globalmovieADD userratingKiyana INT(11AFTER userratingMace;
  
ALTER TABLE `Kodi_Test_Matt_Video_99`.`globalmovieADD userratingJaide INT(11AFTER userratingKiyana;
  
  
CREATE VIEW `Kodi_Test_Matt_Video_99`.`movie` AS SELECT
    
`Kodi_Test_Matt_Video_99`.`globalmovie`.`idMovie` AS `idMovie`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`idFile` AS `idFile`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c00` AS `c00`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c01` AS `c01`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c02` AS `c02`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c03` AS `c03`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c04` AS `c04`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c05` AS `c05`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c06` AS `c06`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c07` AS `c07`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c08` AS `c08`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c09` AS `c09`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c10` AS `c10`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c11` AS `c11`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c12` AS `c12`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c13` AS `c13`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c14` AS `c14`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c15` AS `c15`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c16` AS `c16`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c17` AS `c17`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c18` AS `c18`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c19` AS `c19`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c20` AS `c20`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c21` AS `c21`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c22` AS `c22`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c23` AS `c23`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`idSet` AS `idSet`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`userratingMatt` AS `userrating`
  
FROM `Kodi_Test_Matt_Video_99`.`globalmovie`;

  
/* TRIGGER FIX FOR MULT USERS */
  
DROP TRIGGER IF EXISTS `Kodi_Test_Matt_Video_99`.`delete_file`;
  
DELIMITER $$
  
/* REPLACE ---> KODI <--- WITH YOUR MYSQL LOGIN UID FROM THE ADVANCEDSETTINGS.XML */
  
CREATE DEFINER=`KODI`@`%TRIGGER `Kodi_Test_Matt_Video_99`.`delete_fileAFTER DELETE
  ON 
`Kodi_Test_Matt_Video_99`.`globalfiles`
  FOR 
EACH ROW
  BEGIN
    DELETE FROM 
`Kodi_Test_Matt_Video_99`.bookmark WHERE idfile old.idfile;
    
DELETE FROM `Kodi_Test_Mace_Video_99`.bookmark WHERE idfile old.idfile;
    
DELETE FROM `Kodi_Test_Kiyana_Video_99`.bookmark WHERE idfile old.idfile;
    
DELETE FROM `Kodi_Test_Jaide_Video_99`.bookmark WHERE idfile old.idfile;
    
DELETE FROM settings WHERE idfile old.idfile;
    
DELETE FROM stacktimes WHERE idfile old.idfile;
    
DELETE FROM streamdetails WHERE idfile old.idfile;
  
END$$
  
DELIMITER 

Here is one user setup, just find and replace to add more.
PHP Code:
/*-------------
--- USER 02 ---
-------------*/
  
CREATE DATABASE IF NOT EXISTS Kodi_Test_Mace_Video_99 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

  
/* GLOBAL FILES LINK */
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`files` AS SELECT
   
`Kodi_Test_Matt_Video_99`.`globalfiles`.`idFile` AS `idFile`,
   `
Kodi_Test_Matt_Video_99`.`globalfiles`.`idPath` AS `idPath`,
   `
Kodi_Test_Matt_Video_99`.`globalfiles`.`strFilename` AS `strFilename`,
   `
Kodi_Test_Matt_Video_99`.`globalfiles`.`playCountMace` AS `playCount`,
   `
Kodi_Test_Matt_Video_99`.`globalfiles`.`lastPlayedMace` AS `lastPlayed`,
   `
Kodi_Test_Matt_Video_99`.`globalfiles`.`dateAdded` AS `dateAdded`
  
FROM `Kodi_Test_Matt_Video_99`.`globalfiles`;

  
/* GLOBAL EPISODE LINK */
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`episode` AS SELECT
    
`Kodi_Test_Matt_Video_99`.`globalepisode`.`idEpisode` AS `idEpisode`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`idFile` AS `idFile`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c00` AS `c00`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c01` AS `c01`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c02` AS `c02`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c03` AS `c03`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c04` AS `c04`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c05` AS `c05`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c06` AS `c06`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c07` AS `c07`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c08` AS `c08`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c09` AS `c09`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c10` AS `c10`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c11` AS `c11`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c12` AS `c12`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c13` AS `c13`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c14` AS `c14`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c15` AS `c15`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c16` AS `c16`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c17` AS `c17`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c18` AS `c18`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c19` AS `c19`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c20` AS `c20`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c21` AS `c21`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c22` AS `c22`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`c23` AS `c23`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`idShow` AS `idShow`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`userratingMace` AS `userrating`,
    `
Kodi_Test_Matt_Video_99`.`globalepisode`.`idSeason` AS `idSeason`
  
FROM `Kodi_Test_Matt_Video_99`.`globalepisode`;

  
/* GLOBAL TV SHOW LINK */
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`tvshow` AS SELECT 
    
`Kodi_Test_Matt_Video_99`.`globaltvshow`.`idShow` AS `idShow`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c00` AS `c00`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c01` AS `c01`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c02` AS `c02`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c03` AS `c03`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c04` AS `c04`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c05` AS `c05`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c06` AS `c06`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c07` AS `c07`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c08` AS `c08`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c09` AS `c09`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c10` AS `c10`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c11` AS `c11`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c12` AS `c12`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c13` AS `c13`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c14` AS `c14`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c15` AS `c15`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c16` AS `c16`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c17` AS `c17`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c18` AS `c18`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c19` AS `c19`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c20` AS `c20`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c21` AS `c21`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c22` AS `c22`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`c23` AS `c23`,
    `
Kodi_Test_Matt_Video_99`.`globaltvshow`.`userratingMace` AS `userrating`
  
FROM `Kodi_Test_Matt_Video_99`.`globaltvshow`;

  
/* GLOBAL MOVIE LINK */
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`movie` AS SELECT
    
`Kodi_Test_Matt_Video_99`.`globalmovie`.`idMovie` AS `idMovie`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`idFile` AS `idFile`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c00` AS `c00`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c01` AS `c01`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c02` AS `c02`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c03` AS `c03`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c04` AS `c04`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c05` AS `c05`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c06` AS `c06`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c07` AS `c07`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c08` AS `c08`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c09` AS `c09`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c10` AS `c10`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c11` AS `c11`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c12` AS `c12`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c13` AS `c13`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c14` AS `c14`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c15` AS `c15`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c16` AS `c16`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c17` AS `c17`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c18` AS `c18`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c19` AS `c19`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c20` AS `c20`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c21` AS `c21`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c22` AS `c22`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`c23` AS `c23`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`idSet` AS `idSet`,
    `
Kodi_Test_Matt_Video_99`.`globalmovie`.`userratingMace` AS `userrating`
  
FROM `Kodi_Test_Matt_Video_99`.`globalmovie`;

  
/* USER BOOKMARKS */
  
CREATE TABLE `Kodi_Test_Mace_Video_99`.`bookmark` (
  `
idBookmarkint(11NOT NULL,
    `
idFileint(11) DEFAULT NULL,
    `
timeInSecondsdouble DEFAULT NULL,
    `
totalTimeInSecondsdouble DEFAULT NULL,
    `
thumbNailImagetext,
    `
playertext,
    `
playerStatetext,
    `
typeint(11) DEFAULT NULL
  
ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
  
ALTER TABLE `Kodi_Test_Mace_Video_99`.`bookmarkADD PRIMARY KEY (`idBookmark`), ADD KEY `ix_bookmark` (`idFile`,`type`);
  
ALTER TABLE `Kodi_Test_Mace_Video_99`.`bookmarkMODIFY `idBookmarkint(11NOT NULL AUTO_INCREMENT;

  
/* USER VIEWS */
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`actor` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`actor`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`actor_link` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`actor_link`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`art` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`art`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`country` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`country`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`country_link` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`country_link`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`director_link` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`director_link`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`genre` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`genre`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`genre_link` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`genre_link`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`movielinktvshow` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`movielinktvshow`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`musicvideo` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`musicvideo`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`path` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`path`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`seasons` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`seasons`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`sets` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`sets`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`settings` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`settings`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`stacktimes` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`stacktimes`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`streamdetails` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`streamdetails`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`studio` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`studio`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`studio_link` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`studio_link`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`tag` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`tag`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`tag_link` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`tag_link`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`tvshowlinkpath` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`tvshowlinkpath`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`version` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`version`;
  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`writer_link` AS SELECT FROM `Kodi_Test_Matt_Video_99`.`writer_link`;

  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`episode_view` AS SELECT
    
`episode`.`idEpisode` AS `idEpisode`,
    `
episode`.`idFile` AS `idFile`,
    `
episode`.`c00` AS `c00`,
    `
episode`.`c01` AS `c01`,
    `
episode`.`c02` AS `c02`,
    `
episode`.`c03` AS `c03`,
    `
episode`.`c04` AS `c04`,
    `
episode`.`c05` AS `c05`,
    `
episode`.`c06` AS `c06`,
    `
episode`.`c07` AS `c07`,
    `
episode`.`c08` AS `c08`,
    `
episode`.`c09` AS `c09`,
    `
episode`.`c10` AS `c10`,
    `
episode`.`c11` AS `c11`,
    `
episode`.`c12` AS `c12`,
    `
episode`.`c13` AS `c13`,
    `
episode`.`c14` AS `c14`,
    `
episode`.`c15` AS `c15`,
    `
episode`.`c16` AS `c16`,
    `
episode`.`c17` AS `c17`,
    `
episode`.`c18` AS `c18`,
    `
episode`.`c19` AS `c19`,
    `
episode`.`c20` AS `c20`,
    `
episode`.`c21` AS `c21`,
    `
episode`.`c22` AS `c22`,
    `
episode`.`c23` AS `c23`,
    `
episode`.`idShow` AS `idShow`,
    `
episode`.`userrating` AS `userrating`,
    `
episode`.`idSeason` AS `idSeason`,
    `
files`.`strFilename` AS `strFileName`,
    `
path`.`strPath` AS `strPath`,
    `
files`.`playCount` AS `playCount`,
    `
files`.`lastPlayed` AS `lastPlayed`,
    `
files`.`dateAdded` AS `dateAdded`,
    `
tvshow`.`c00` AS `strTitle`,
    `
tvshow`.`c08` AS `genre`,
    `
tvshow`.`c14` AS `studio`,
    `
tvshow`.`c05` AS `premiered`,
    `
tvshow`.`c13` AS `mpaa`,
    `
bookmark`.`timeInSeconds` AS `resumeTimeInSeconds`,
    `
bookmark`.`totalTimeInSeconds` AS `totalTimeInSeconds`
  
FROM (((((`Kodi_Test_Mace_Video_99`.`episodeJOIN `Kodi_Test_Mace_Video_99`.`filesON((`files`.`idFile` = `episode`.`idFile`)))
    
JOIN `Kodi_Test_Mace_Video_99`.`tvshowON((`tvshow`.`idShow` = `episode`.`idShow`)))
    
JOIN `Kodi_Test_Mace_Video_99`.`seasonsON((`seasons`.`idSeason` = `episode`.`idSeason`)))
    
JOIN `Kodi_Test_Mace_Video_99`.`pathON((`files`.`idPath` = `path`.`idPath`)))
    
LEFT JOIN `Kodi_Test_Mace_Video_99`.`bookmarkON(((`bookmark`.`idFile` = `episode`.`idFile`) AND (`bookmark`.`type` = 1))));

  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`movie_view` AS SELECT
    
`movie`.`idMovie` AS `idMovie`,
    `
movie`.`idFile` AS `idFile`,
    `
movie`.`c00` AS `c00`,
    `
movie`.`c01` AS `c01`,
    `
movie`.`c02` AS `c02`,
    `
movie`.`c03` AS `c03`,
    `
movie`.`c04` AS `c04`,
    `
movie`.`c05` AS `c05`,
    `
movie`.`c06` AS `c06`,
    `
movie`.`c07` AS `c07`,
    `
movie`.`c08` AS `c08`,
    `
movie`.`c09` AS `c09`,
    `
movie`.`c10` AS `c10`,
    `
movie`.`c11` AS `c11`,
    `
movie`.`c12` AS `c12`,
    `
movie`.`c13` AS `c13`,
    `
movie`.`c14` AS `c14`,
    `
movie`.`c15` AS `c15`,
    `
movie`.`c16` AS `c16`,
    `
movie`.`c17` AS `c17`,
    `
movie`.`c18` AS `c18`,
    `
movie`.`c19` AS `c19`,
    `
movie`.`c20` AS `c20`,
    `
movie`.`c21` AS `c21`,
    `
movie`.`c22` AS `c22`,
    `
movie`.`c23` AS `c23`,
    `
movie`.`idSet` AS `idSet`,
    `
movie`.`userrating` AS `userrating`,
    `
sets`.`strSet` AS `strSet`,
    `
sets`.`strOverview` AS `strSetOverview`,
    `
files`.`strFilename` AS `strFileName`,
    `
path`.`strPath` AS `strPath`,
    `
files`.`playCount` AS `playCount`,
    `
files`.`lastPlayed` AS `lastPlayed`,
    `
files`.`dateAdded` AS `dateAdded`,
    `
bookmark`.`timeInSeconds` AS `resumeTimeInSeconds`,
    `
bookmark`.`totalTimeInSeconds` AS `totalTimeInSeconds`
  
FROM ((((`Kodi_Test_Mace_Video_99`.`movieLEFT JOIN `Kodi_Test_Mace_Video_99`.`setsON((`sets`.`idSet` = `movie`.`idSet`)))
    
JOIN `Kodi_Test_Mace_Video_99`.`filesON((`files`.`idFile` = `movie`.`idFile`)))
    
JOIN `Kodi_Test_Mace_Video_99`.`pathON((`path`.`idPath` = `files`.`idPath`)))
    
LEFT JOIN `Kodi_Test_Mace_Video_99`.`bookmarkON(((`bookmark`.`idFile` = `movie`.`idFile`) AND (`bookmark`.`type` = 1))));

  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`musicvideo_view` AS SELECT
    
`musicvideo`.`idMVideo` AS `idMVideo`,
    `
musicvideo`.`idFile` AS `idFile`,
    `
musicvideo`.`c00` AS `c00`,
    `
musicvideo`.`c01` AS `c01`,
    `
musicvideo`.`c02` AS `c02`,
    `
musicvideo`.`c03` AS `c03`,
    `
musicvideo`.`c04` AS `c04`,
    `
musicvideo`.`c05` AS `c05`,
    `
musicvideo`.`c06` AS `c06`,
    `
musicvideo`.`c07` AS `c07`,
    `
musicvideo`.`c08` AS `c08`,
    `
musicvideo`.`c09` AS `c09`,
    `
musicvideo`.`c10` AS `c10`,
    `
musicvideo`.`c11` AS `c11`,
    `
musicvideo`.`c12` AS `c12`,
    `
musicvideo`.`c13` AS `c13`,
    `
musicvideo`.`c14` AS `c14`,
    `
musicvideo`.`c15` AS `c15`,
    `
musicvideo`.`c16` AS `c16`,
    `
musicvideo`.`c17` AS `c17`,
    `
musicvideo`.`c18` AS `c18`,
    `
musicvideo`.`c19` AS `c19`,
    `
musicvideo`.`c20` AS `c20`,
    `
musicvideo`.`c21` AS `c21`,
    `
musicvideo`.`c22` AS `c22`,
    `
musicvideo`.`c23` AS `c23`,
    `
musicvideo`.`userrating` AS `userrating`,
    `
files`.`strFilename` AS `strFileName`,
    `
path`.`strPath` AS `strPath`,
    `
files`.`playCount` AS `playCount`,
    `
files`.`lastPlayed` AS `lastPlayed`,
    `
files`.`dateAdded` AS `dateAdded`,
    `
bookmark`.`timeInSeconds` AS `resumeTimeInSeconds`,
    `
bookmark`.`totalTimeInSeconds` AS `totalTimeInSeconds`
  
FROM (((`Kodi_Test_Mace_Video_99`.`musicvideoJOIN `Kodi_Test_Mace_Video_99`.`filesON((`files`.`idFile` = `musicvideo`.`idFile`)))
    
JOIN `Kodi_Test_Mace_Video_99`.`pathON((`path`.`idPath` = `files`.`idPath`)))
    
LEFT JOIN `Kodi_Test_Mace_Video_99`.`bookmarkON(((`bookmark`.`idFile` = `musicvideo`.`idFile`) AND (`bookmark`.`type` = 1))));

  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`tvshowcounts` AS SELECT
    
`tvshow`.`idShow` AS `idShow`,
    
MAX(`files`.`lastPlayed`) AS `lastPlayed`,
    
NULLIF(COUNT(`episode`.`c12`),0) AS `totalCount`,
    
COUNT(`files`.`playCount`) AS `watchedcount`,
    
NULLIF(COUNT(DISTINCT `episode`.`c12`),0) AS `totalSeasons`,
    
MAX(`files`.`dateAdded`) AS `dateAdded`
  
FROM ((`Kodi_Test_Mace_Video_99`.`tvshowLEFT JOIN `Kodi_Test_Mace_Video_99`.`episodeON((`episode`.`idShow` = `tvshow`.`idShow`)))
    
LEFT JOIN `Kodi_Test_Mace_Video_99`.`filesON((`files`.`idFile` = `episode`.`idFile`))) GROUP BY `tvshow`.`idShow`;

  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`tvshow_view` AS SELECT
    
`tvshow`.`idShow` AS `idShow`,
    `
tvshow`.`c00` AS `c00`,
    `
tvshow`.`c01` AS `c01`,
    `
tvshow`.`c02` AS `c02`,
    `
tvshow`.`c03` AS `c03`,
    `
tvshow`.`c04` AS `c04`,
    `
tvshow`.`c05` AS `c05`,
    `
tvshow`.`c06` AS `c06`,
    `
tvshow`.`c07` AS `c07`,
    `
tvshow`.`c08` AS `c08`,
    `
tvshow`.`c09` AS `c09`,
    `
tvshow`.`c10` AS `c10`,
    `
tvshow`.`c11` AS `c11`,
    `
tvshow`.`c12` AS `c12`,
    `
tvshow`.`c13` AS `c13`,
    `
tvshow`.`c14` AS `c14`,
    `
tvshow`.`c15` AS `c15`,
    `
tvshow`.`c16` AS `c16`,
    `
tvshow`.`c17` AS `c17`,
    `
tvshow`.`c18` AS `c18`,
    `
tvshow`.`c19` AS `c19`,
    `
tvshow`.`c20` AS `c20`,
    `
tvshow`.`c21` AS `c21`,
    `
tvshow`.`c22` AS `c22`,
    `
tvshow`.`c23` AS `c23`,
    `
tvshow`.`userrating` AS `userrating`,
    `
path`.`idParentPath` AS `idParentPath`,
    `
path`.`strPath` AS `strPath`,
    `
tvshowcounts`.`dateAdded` AS `dateAdded`,
    `
tvshowcounts`.`lastPlayed` AS `lastPlayed`,
    `
tvshowcounts`.`totalCount` AS `totalCount`,
    `
tvshowcounts`.`watchedcount` AS `watchedcount`,
    `
tvshowcounts`.`totalSeasons` AS `totalSeasons`
  
FROM (((`Kodi_Test_Mace_Video_99`.`tvshowLEFT JOIN `Kodi_Test_Mace_Video_99`.`tvshowlinkpathON((`tvshowlinkpath`.`idShow` = `tvshow`.`idShow`)))
    
LEFT JOIN `Kodi_Test_Mace_Video_99`.`pathON((`path`.`idPath` = `tvshowlinkpath`.`idPath`)))
    
JOIN `Kodi_Test_Mace_Video_99`.`tvshowcountsON((`tvshow`.`idShow` = `tvshowcounts`.`idShow`))) GROUP BY `tvshow`.`idShow`;

  
CREATE VIEW `Kodi_Test_Mace_Video_99`.`season_view` AS SELECT
    
`seasons`.`idSeason` AS `idSeason`,
    `
seasons`.`idShow` AS `idShow`,
    `
seasons`.`season` AS `season`,
    `
seasons`.`name` AS `name`,
    `
tvshow_view`.`strPath` AS `strPath`,
    `
tvshow_view`.`c00` AS `showTitle`,
    `
tvshow_view`.`c01` AS `plot`,
    `
tvshow_view`.`c05` AS `premiered`,
    `
tvshow_view`.`c08` AS `genre`,
    `
tvshow_view`.`c14` AS `studio`,
    `
tvshow_view`.`c13` AS `mpaa`,
    
COUNT(DISTINCT `episode_view`.`idEpisode`) AS `episodes`,
    
COUNT(`files`.`playCount`) AS `playCount`,
    
MIN(`episode_view`.`c05`) AS `aired`
  
FROM (((`Kodi_Test_Mace_Video_99`.`seasonsJOIN `Kodi_Test_Mace_Video_99`.`tvshow_viewON((`tvshow_view`.`idShow` = `seasons`.`idShow`)))
    
JOIN `Kodi_Test_Mace_Video_99`.`episode_viewON(((`episode_view`.`idShow` = `seasons`.`idShow`) AND (`episode_view`.`c12` = `seasons`.`season`))))
    
JOIN `Kodi_Test_Mace_Video_99`.`filesON((`files`.`idFile` = `episode_view`.`idFile`))) GROUP BY `seasons`.`idSeason`; 

Find and Repalce Vars:
  • Matt [Count 259]
  • Mace [Count 79]
  • Kiyana
  • Jaide

I use Matt as my main Database, The names above should only match themselves

Opps I left in my Test in the DB names, easy fix Find and Replace "_Test_" with "_" this wont replace anything else

This seems cool, but I have a couple of questions... you say Matt is the main database... but couldn't I just use the word main and then create X number of child databases? What's the advantage?

Also, you say "This has only been Tested on a New Setup"... what do you mean by that?

I followed your guide on the 99* databases for Kodi 16 and they are awesome... but no I am trying to upgrade to 17 and I can see that upgrading might be impossible. I guess I could modify the changes back to original or start over - but I'd like to find a way to keep my watched data, etc. Have you any advice?
Reply
@Smasher
Follow the 107 Guide
This should work for you, only sync with the master user but you both will have the same info and your own watched/rating status
Images should auto sync in as you move around the list, if you're on a non-windows box you can try this (I use this after the master import then just them get theirs are they pop in, this is only cause the main import is huge)

Milhouse has created this cool python script
GitHub: https://github.com/MilhouseVH/texturecache.py
Kodi Main Thread: 158373 (thread)

Code:
ssh into your kodi box
cd .kodi/userdata/
curl https://raw.githubusercontent.com/MilhouseVH/texturecache.py/master/texturecache.py -o texturecache.py
chmod +x ./texturecache.py
nano texturecache.cfg
Then enter the following into the file
Code:
allow.recacheall=yes
This should allow you todo sub-profiles just finish the path to the sub-profile
Code:
userdata = ~/.xbmc/userdata
Then save [CTRL+O] and exit [CTRL+X] nano
now enter one of the following
Code:
./texturecache.py C video
./texturecache.py C tvshows
./texturecache.py C sets
./texturecache.py C movies
This can take some time to complete on a RPI3 and my full collection it takes 29 Hours to finish on a 6 Mbps link

@bmac88
I wouldn't recommend using more then one profile to sync as the fasthash changes with users (Only for TV, Movies are fine) from what I can tell it will recheck everything.
If i had to guess it will be with one of the views being UNDEFINED as SQL seems to look at it wrong, changing them to MERGE should fix it.
I never tested this as I have disabled updating for all my other users. They can wait Smile

@john_es
If you rename your old database eg add "_OLD" to the end just so Kodi don't see it,
Follow the 107 Guide

Re-import all your data doing the sync
Then you can run this to update from an older database, one user at a time tho

Should be easy to sub out the information;
PHP Code:
------------------------------
--- 
COPY OVER WATCH STATUS ---
------------------------------
SET SQL_SAFE_UPDATES 0;
UPDATE Kodi_U01_Video_107.global_files AS NEWTBL
        INNER JOIN
    Kodi_Matt_Video_93
.globalfiles AS OLDTBL ON NEWTBL.strFilename OLDTBL.strFilename 
SET 
    NEWTBL
.lastPlayed_U01 OLDTBL.lastPlayedMatt,
    
NEWTBL.playCount_U01 OLDTBL.playCountMatt
WHERE
    NEWTBL
.strFilename OLDTBL.strFilename AND OLDTBL.lastPlayedMatt IS NOT NULL;
SET SQL_SAFE_UPDATES 1
Reply
Following the guide just gives me one master database, with different watch status?

I can see in this thread, that this causes a lot of trouble, everytime a new version comes out.

I want 2 independent databases... so I have to scan libraries twice. Everytime I have new content.

But I dont want to start from scratch right now.

I have my MySQL on Synology NAS.

I have tried to copy MyVideos107 to Newuser107
But I dont have "write access" to Newuser107
So I can't mark items as "watched / not watched" or scan for new content.
Reply
(2017-04-10, 12:32)BigMong Wrote: @john_es
If you rename your old database eg add "_OLD" to the end just so Kodi don't see it,
Follow the 107 Guide

Re-import all your data doing the sync
Then you can run this to update from an older database, one user at a time tho

Awesome!

So, if I rename my old DB to _OLD... and then run the new version of Kodi, it will create me a new blank database... You mentioned to re-import my data - how do I do that? Are we talking about via Kodi interface, or a mysql script?
Reply
(2017-04-10, 13:45)Smasher Wrote: Following the guide just gives me one master database, with different watch status?

I can see in this thread, that this causes a lot of trouble, everytime a new version comes out.

I want 2 independent databases... so I have to scan libraries twice. Everytime I have new content.

But I dont want to start from scratch right now.

I have my MySQL on Synology NAS.

I have tried to copy MyVideos107 to Newuser107
But I dont have "write access" to Newuser107
So I can't mark items as "watched / not watched" or scan for new content.
Yes that's what this does, one mast and slaves.
When using SQL why would you have the data multiple times?
The problems are expected, when the DB number changes it means something in the DB has changed, SQL setups is for Advanced users and the scripts in this thread changes how it works.

If you want 2 DB they run on there own, it looks like your doing it right just missed one step (User permissions).
Keep your advancedsettings.xml on each user with there own <name></name> tags, This points to the Database.

PHP Code:
GRANT ALL PRIVILEGES ON `Kodi\_U01\_Video\_107`.* TO 'KODI_17'@'%' WITH GRANT OPTION
Change the above with your setup
Database Name: Kodi\_U01\_Video\_107
if you have _ in it put a \ before
SQL User: KODI_17

Or you can use the lazy way Smile
Please Note: This will give full access to this user account to everything on your SQL Server, Eg. your user is prob KODI with a password of KODI. Security is there for a reason Smile
PHP Code:
GRANT ALL PRIVILEGES ON *.* TO 'KODI_17'@'%' WITH GRANT OPTION
More information on GRANT https://dev.mysql.com/doc/refman/5.7/en/grant.html

I hope this answers your question

(2017-04-10, 20:54)john_es Wrote:
(2017-04-10, 12:32)BigMong Wrote: @john_es
If you rename your old database eg add "_OLD" to the end just so Kodi don't see it,
Follow the 107 Guide

Re-import all your data doing the sync
Then you can run this to update from an older database, one user at a time tho

Awesome!

So, if I rename my old DB to _OLD... and then run the new version of Kodi, it will create me a new blank database... You mentioned to re-import my data - how do I do that? Are we talking about via Kodi interface, or a mysql script?

Yeah if the name changes part from just the number on the end it will create a new database.
Re-import: In Kodi you may already have your sources setup but you will need to reset the type of data (Videos > Files > then press "C" and set type) then it will re-import all data
you can use the other script to copy of your watch status (or you can use Trakt)
Reply
Thanks again.

I already have several profiles/databases, like Kids and some others.
They have "name tag" in advancedsettings.xml"

No problems there. They work perfectly.

All use the same username and password : xbmc (old mysql setup)

So when I copy myvideos107 to a new name, I don't understand why the user "xbmc" dont have proper permissions to the new database.
Reply
  • 1
  • 15
  • 16
  • 17(current)
  • 18
  • 19
  • 26

Logout Mark Read Team Forum Stats Members Help
[MYSQL] HOW-TO: 5 User XBMC5