私はこの配列を持っています:
1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0,11:0,12:0,13:0,14:0,15:0,16:0
17:0,18:0,19:0,20:0,21:0,22:0,23:0,24:0,25:0,26:0,27:0,28:0,29:0,30:0,31:0,32:0,
49:0,33:0,34:0,35:0,36:0,37:0,38:0,39:0,40:0,41:0,42:0,43:0,44:0,45:0,46:0,47:0,
48:0,50:0,51:0,52:0,53:0,54:0,55:0,56:0,57:0,58:0,59:0,60:0,61:0,62:0,63:9,64:0,
65:0,66:0,67:0,68:0,69:0,70:0,71:0,72:0,73:0,74:0,75:0,76:0,77:0,78:0,79:0,80:0,
81:0,82:0,83:0,84:0,85:0,86:0,87:0,88:0,89:0,90:0,91:0,92:0,93:0,94:0,95:0,96:0,
97:0,98:0,99:0,100:0
*:0
次の結果のみが得られるように、すべてのエントリを次のようにフィルタリングします。
63:9
私はそれをよりよく説明する必要があると思います:
users
フィールドを持つテーブルがありますuser_skill
。
このフィールドには、次のような文字列があります。次の1:0, 2:0, 3:0, 4:3, 5:8, 6:9, 7:0, 8:0, 9:0
構文を使用します。skill_id:prio,skill_id:prio,skill_id:prio,skill_id:prio,...
users
今、私はテーブルを次のようにテーブルに結合したいと思いskills
ます:
SELECT skill_name
FROM users
inner join skills on skills.skill_id = ANY (string_to_array(regexp_replace(user_skill,':[0-9]*','','g'),',')::int[])
where user_id = 16
order by skill_name
それはうまくいきますskill_name
が、ユーザーが持っている場所だけを見たいですprio <> 0
。