webForumDet fria alternativet

Select ... where x in (array)

3 svar · 314 visningar · startad av pettsson

pettssonMedlem sedan jan. 20021 122 inlägg
#1

Efter sökning och läsning tror jag inte att detta går, men att skriva runt det blev så klumpigt att jag måste fråga...
Jag har en array groups i en tabell users, och vill plocka ut de grupper som har ett id i arrayen ur tabellen groups, dvs något åt det här hållet:

SELECT * FROM groups WHERE groupid IN (SELECT groups FROM users WHERE userid = <php>);

Här får jag ett fel ung. 'integer=integer[], finns ingen operator.'
Går detta att lösa utan att först hämta arrayen, strängmanipulera lite och sedan köra del två? Så gör jag nu, men det är rätt osnyggt och inte helt uppenbart vad som händer när man läser koden... (kommentera är fegt ;) )

@ndersMedlem sedan juni 200032 969 inlägg
#2

Hur menar du att du har en array i users-tabellen? Menar du att du har en kommaseparerad lista med flera värden i ett fält? I så fall; gör om - gör rätt. Bryt ut dessa värden till en egen tabell, usergroups, där du lagrar användarid och gruppid. Sedan är det bara att joina för fulla muggar.

pettssonMedlem sedan jan. 20021 122 inlägg
#3

Kanske skulle skrivit det ja... Jag använder PostgreSQL, och där finns det arrays. Resultatet av t.ex. "SELECT groups FROM users WHERE userid='pettsson'" blir "{0,1,4}" om användaren pettsson är i grupperna med id 0, 1 och 4. Så i slutändan blir det ju en kommasepararerad lista iofs...
Du menar att jag har en tabell med en rad för varje grupp man är medlem i? Dvs "SELECT groupid FROM usergroups WHERE username='pettsson'"-> tre rader; 0, 1 och 4?

Peter SMedlem sedan dec. 20025 483 inlägg
#4

Det är det korrekta sättet att lagra information i en databas.

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