När jag raderar en personalkategori flyttar jag användarna som ingick denna till en speciell kategori för personal som inte tillhör någon kategori (categoryid = 6).
Jag kom just på att jag gjort det onödigt svårt för mig. Det vore kanske enklare att hämta icke-kategoriserade användare genom att hämta de som inte har några relationer, men hur gör jag det?
Låt säga att jag ska hämta användare från tabellen "users" om det inte finns någon post i "user_relations" som har samma userid.
Jag testade detta, men det funkade inget vidare:
SELECT DISTINCT users.userid FROM users, user_relations WHERE users.userid <> user_relations.userid
delete from pers_categoryrelations
where userid in (select userid from
pers_categoryrelations
where category not in ([den kategori som skall bort],6))
where category = [den kategori som skall bort]
update pers_categoryrelations
set category = 6
where category = [den kategori som skall bort]
and userid not in
(select userid from pers_categoryrelations
where category not in (6,4711))
delete from pers_category
where category = [den kategori som skall bort]
Redigerat
Felet var det andra "WHERE" istället för "AND".
Det protesteras när jag försöker köra den första frågan vilken ser ut enligt nedan:
DELETE FROM pers_categoryrelations
WHERE userid IN (SELECT userid FROM pers_categoryrelations WHERE categoryid NOT IN (12,6))
[red]AND[/red] categoryid = 12
Syntaxfel (operator saknas) i frågeuttrycket 'userid IN (SELECT userid FROM pers_categoryrelations WHERE categoryid NOT IN (12,6)) WHERE categoryid = 12'.
Vad betyder förresten "NOT IN (6,4711)" i nästa fråga? Var kommer 4711 ifrån?
Nu är det uppenbarligen den andra frågan som inte fungerar som den ska. De användare som ska flyttas till kategorin med id "6" gör inte det utan har kvar sin gamla relation, och detta gör i sin tur att den tredje frågan inte kan köras eftersom den försöker ta bort en rad som har relationer till pers_categoryrelations.
Redigerat
Jag kortade ner den andra frågan och då fungerade det. Nu ser det ut enligt följande:
DELETE FROM pers_categoryrelations
WHERE userid IN (SELECT userid FROM pers_categoryrelations
WHERE categoryid NOT IN (14,6)) AND categoryid = 14
UPDATE pers_categoryrelations SET categoryid = 6
WHERE categoryid = 14
DELETE FROM pers_categories
WHERE categoryid = 14