תנאי בשאילתת postgresql כאשר השדה הוא מסוג json שבתוכו מערך וצריך להתאים איבר עם איבר ממערך חיצוני
-
תוכן העמודה הוא
{"in_departments":[6]}
אני צריך תנאי שיחזיר תוצאה חיובית ככל ואיבר (המס' 6) שווה לאיבר כלשהו מתוך מערך חיצוני (שמגיע בפרמטר לשאילתא).
נגיד שהמערך החיצוני (בשפה php) הוא $departments
ראיתי כמה דוגמאות שנוגעות למערכים, ולא מצאתי תואם למקרה שלי (מסתבר שזה כיון שהשדה הוא מסוג json). או פטנט אחר שיועיל לי.
תודה.
-
אני מעיר על השאלה, במקרה שהצגת מדובר באיבר הראשון והאחרון והיחיד.
אבל כיוון שמערך יכול להכיל עוד ערכים, השאלה אם כוונתך שאיבר 0 == אחד מהרשימה $departments, או איבר אחרון == אחד מהרשימה, או איבר כל שהוא == אחד מהרשימה. ויש עוד אפשרות, שכל האיברים יהיו גם ברשימה $departments, או ששני הרשימות יהיו זהות, ועוד...ראה אם זה עוזר לך:
https://stackoverflow.com/questions/62198038/check-if-postgres-jsonb-contains-one-of-the-values -
@dovid התכוונתי לאיבר כלשהו. ערכתי את השאלה.
בדקתי את המקור שהבאת, ניסיתי את האחרון - יש שגיאה -
Warning: pg_query(): Query failed: ERROR: operator does not exist: json ?| text[] LINE 2: AND more_data -> 'in_departments' ?| array['appl... ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. in /var/www/api/file.php on line 134
אולי זה כי הטייפ אצלי הוא json ולא jsonb?
-
היה חסר שמה שלושה תווים, עדכנתי את התשובה לפני שעה בערך, תנסה שוב.
אגב את המשחקים עשיתי פה:
https://sqliteonline.com/
עם הקוד הזה:create table tTest (data json); insert into tTest (data) values ('{"in_departments":[6,7]}'::json ); SELECT * FROM tTest WHERE data::jsonb @> '{"in_departments": [6]}'::jsonb