webForumDet fria alternativet

Flytta avändare

6 svar · 224 visningar · startad av Skarre

SkarreMedlem sedan apr. 20012 427 inlägg
#1

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).

Tabellen "pers_categoryrelations":

-----------------------
| userid | categoryid |
-----------------------
|      1 |          2 |
|      1 |          3 |
-----------------------

Koden:

'Flyttar användare till "Icke kategoriserade"
conn.Execute("UPDATE pers_categoryrelations SET categoryid = 6 WHERE categoryid = " & id)
		
'Raderar kategorin
conn.Execute("DELETE FROM pers_categories WHERE categoryid = " & id)

Men jag vill endast flytta användare dit om de inte tillhör någon annan kategori. Hur åstadkommer jag detta?

Förslag mottages tacksamt!

SkarreMedlem sedan apr. 20012 427 inlägg
#2

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
LarsGMedlem sedan dec. 200012 464 inlägg
#3

Då måste du göra flera saker

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]
SkarreMedlem sedan apr. 20012 427 inlägg
#4

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? :)

SkarreMedlem sedan apr. 20012 427 inlägg
#5

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
LarsGMedlem sedan dec. 200012 464 inlägg
#6

4711 skall vara [den kategori som skall bort]

SkarreMedlem sedan apr. 20012 427 inlägg
#7

LarsG skrev:

4711 skall vara [den kategori som skall bort]

Aha! Då fungerar det. Men jag klarade mig av någon anledning utan den sista "AND"-biten i den andra frågan.

Hursomhelst är det alltid lika trevligt att få en massa skön kod från dig Lars! Tack så mycket! :bire

136 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)