- Jasperdv
- Groep: Forumleden
- Posts: 13
- Actief sinds: 20-02-2012
Hoi!
Ik ben bezig met een systeem waarmee mensen elkaar berichten kunnen sturen. Je kan naar meerdere mensen tegelijk een bericht sturen, en wanneer dat zo is, dan sla ik alle user-id's op waar het bericht heen wordt gestuurd.
In mijn tabel 'berichten' heb ik dan dus een kolom 'user_naar' waar het user-id van de geadresseerde in staat, en ik heb een kolom 'geadresseerden' waar alle geadresseerden in staan.
Als een bericht dus naar gebruiker 3 en 5 wordt gestuurd, dan heb ik dit in mijn database:
user_naar | geadresseerden
3 | 3,5
5 | 3,5
Die 3,5 is in mijn database een character-datatype.
Nu wil ik bij het ophalen van deze id's de gebruikersnamen erbij geven, dus user 3 is Herman, user 5 is Klaas, dan wil ik dat mijn query "Herman, Klaas" teruggeeft.
Ik heb daarvoor dit query-stukje gebakken (even overdreven uitgelijnd voor de overzichtelijkheid):
maar die geeft mij dit terug:
Ik moet dus op de een of andere manier b.geadresseerden als array van integers zien te casten. Maar hoe doe ik dat?
werkt niet omdat 'array' geen geldig datatype is in PgSQL. Casten als integer werkt uiteraard ook niet, want 3,5 is geen integer, en dat zal '3' opleveren als je dat cast naar een integer.
Dit werkt helaas ook niet:
met deze melding:
Bovenstaand query-stukje is deel van een andere query, anders had ik alle usernames gewoon los kunnen selecten en ze in PHP omzetten naar een string met komma's ertussen om dat weer te geven, maar dat gaat nu dus niet.
Ik kan er evt een losse query van maken, maar het lijkt me zo handiger/efficiënter.
Alvast bedankt!
Ik ben bezig met een systeem waarmee mensen elkaar berichten kunnen sturen. Je kan naar meerdere mensen tegelijk een bericht sturen, en wanneer dat zo is, dan sla ik alle user-id's op waar het bericht heen wordt gestuurd.
In mijn tabel 'berichten' heb ik dan dus een kolom 'user_naar' waar het user-id van de geadresseerde in staat, en ik heb een kolom 'geadresseerden' waar alle geadresseerden in staan.
Als een bericht dus naar gebruiker 3 en 5 wordt gestuurd, dan heb ik dit in mijn database:
user_naar | geadresseerden
3 | 3,5
5 | 3,5
Die 3,5 is in mijn database een character-datatype.
Nu wil ik bij het ophalen van deze id's de gebruikersnamen erbij geven, dus user 3 is Herman, user 5 is Klaas, dan wil ik dat mijn query "Herman, Klaas" teruggeeft.
Ik heb daarvoor dit query-stukje gebakken (even overdreven uitgelijnd voor de overzichtelijkheid):
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ARRAY_TO_STRING ( ARRAY ( SELECT l.gebruikersnaam FROM leden l WHERE l.id IN ( b.geadresseerden ) ) ), \', \' ) AS geadresseerden_naam |
maar die geeft mij dit terug:
Quote
Dat is natuurlijk logisch, want l.id is een integer, en b.geadresseerden is gewoon een character.pg_prepare(): Query failed: ERROR: operator does not exist: integer = character
LINE 3: ...( SELECT l.gebruikersnaam FROM leden l WHERE l.id IN (b.gead...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Ik moet dus op de een of andere manier b.geadresseerden als array van integers zien te casten. Maar hoe doe ik dat?
| 1 | CAST(b.geadresseerden AS array) |
werkt niet omdat 'array' geen geldig datatype is in PgSQL. Casten als integer werkt uiteraard ook niet, want 3,5 is geen integer, en dat zal '3' opleveren als je dat cast naar een integer.
Dit werkt helaas ook niet:
| 1 | STRING_TO_ARRAY(b.geadresseerden, \',\') |
met deze melding:
Quote
Hoe kan ik dit het beste doen?pg_prepare(): Query failed: ERROR: operator does not exist: integer = text[]
LINE 3: ...( SELECT l.gebruikersnaam FROM leden l WHERE l.id IN (string...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Bovenstaand query-stukje is deel van een andere query, anders had ik alle usernames gewoon los kunnen selecten en ze in PHP omzetten naar een string met komma's ertussen om dat weer te geven, maar dat gaat nu dus niet.
Ik kan er evt een losse query van maken, maar het lijkt me zo handiger/efficiënter.
Alvast bedankt!


