Ich habe mir folgendes Konstrukt gebaut:
Ein
SELECT group_concat(id) FROM owncloud.oc_share where share_with="9B"
SELECT distinct share_with FROM owncloud.oc_share where parent in ([IDs aus der ersten Abfrage])
liefert mir eine Liste alle SuS, die für die Freigaben dieser Gruppe konfiguriert sind. Die Liste sollte vollständig sein, wenn zumindest bei einer Freigabe die Einträge vollständig sind.
Mit
select * from (SELECT distinct share_with FROM owncloud.oc_share where parent in ([IDs aus der ersten Abfrage])) a LEFT JOIN ( SELECT * FROM owncloud.oc_share where parent = ID aus der Liste]) ON (a.share_with = b.share_with) where b.id is null
sehe ich dann, bei welcher Freigabe ein Benutzer fehlt (dieser ist das Ergebnis der Abfrage).
Dann hole ich mir mit
SELECT * FROM owncloud.oc_share where parent=[ID]
die ID der Benutzereinträge und baue mit mit folgenden Script eine temp. Tabelle (vorher anlegen) zusammen:
set @missing_uid = '[UID]';
set @id_vorlage = [ID aus letzter Abfrage];
insert into oc_share2 select
null as id,
share_type,
@missing_uid as share_with,
uid_owner,
parent,
item_type,
item_source,
item_target,
file_source,
file_target, permissions, stime, accepted, expiration, token, mail_send, uid_initiator, null as password, share_name, password_by_talk, note, hide_download, label
from oc_share where id = @id_vorlage;
Wenn ich dann alles zusammen habe kommen noch :
update oc_share2 set id=id+[max ID aus oc_share];
insert into oc_share select * from oc_share2;
alter table oc_share2 AUTO_INCREMENT=1;
Damit konnte ich das bisher retten.
Die Arbeit habe ich mir aber nur einmal gemacht, nachdem die Lehrer ihre Freigaben eingerichtet hatten. Dann habe ich sie angewiesen keine neue Freigaben mehr zu erstellen und die bestehenden funktionierenden zu nutzen.