try to get string_Add to work in recommendation job by adding a cast, take 2, a=chris
try to get string_Add to work in recommendation job by adding a cast, take 2, a=chris
diff --git a/src/library/media_jobs/RecommendationJob.php b/src/library/media_jobs/RecommendationJob.php
index 2e80b7124..6addac561 100644
--- a/src/library/media_jobs/RecommendationJob.php
+++ b/src/library/media_jobs/RecommendationJob.php
@@ -538,10 +538,12 @@ class RecommendationJob extends MediaJob
{
L\crawlLog("...Computing User Item Similarity Scores.");
$db = $this->db;
+ //SQLITE and MYSQL use GROUP_CONCAT, Postgres uses STRING_AGG
$db_list_function = in_array($db->to_upper_dbms, ["SQLITE3", "MYSQL"]) ?
"GROUP_CONCAT" : "STRING_AGG";
- $user_group_sql = "SELECT USER_ID, $db_list_function(GROUP_ID, ',')" .
- " AS GROUP_IDS FROM USER_GROUP GROUP BY USER_ID";
+ $user_group_sql = "SELECT USER_ID, $db_list_function(" .
+ "CAST(GROUP_ID AS STRING), ',') " .
+ "AS GROUP_IDS FROM USER_GROUP GROUP BY USER_ID";
$results = $db->execute($user_group_sql);
$user_groups = [];
while ($row = $db->fetchArray($results)) {
@@ -685,15 +687,17 @@ class RecommendationJob extends MediaJob
public function computeGroupUserEmbeddings($group_embeddings)
{
$db = $this->db;
+ //SQLITE and MYSQL use GROUP_CONCAT, Postgres uses STRING_AGG
$db_list_function = in_array($db->to_upper_dbms, ["SQLITE3", "MYSQL"]) ?
"GROUP_CONCAT" : "STRING_AGG";
$timestamp = floor(time() / self::UPDATE_PERIOD ) * self::UPDATE_PERIOD;
$condition = "ITEM_TYPE = ? AND USER_ID <> 2 AND" .
" ((UPDATE_PERIOD = ? AND UPDATE_TIMESTAMP = ?) OR" .
" (UPDATE_PERIOD = ?))";
- $impression_sql = "SELECT USER_ID, $db_list_function(ITEM_ID, ',') AS" .
- " ITEM_IDS FROM ITEM_IMPRESSION_SUMMARY WHERE $condition" .
- " GROUP BY USER_ID";
+ $impression_sql = "SELECT USER_ID, $db_list_function( ".
+ "CAST(ITEM_ID AS STRING), ',') AS " .
+ "ITEM_IDS FROM ITEM_IMPRESSION_SUMMARY WHERE $condition " .
+ "GROUP BY USER_ID";
$results = $db->execute($impression_sql,
[C\GROUP_IMPRESSION, self::UPDATE_PERIOD, $timestamp,
C\MOST_RECENT_VIEW]);
@@ -1154,15 +1158,17 @@ class RecommendationJob extends MediaJob
public function computeWikiUserEmbeddings($item_embeddings)
{
$db = $this->db;
+ //SQLITE and MYSQL use GROUP_CONCAT, Postgres uses STRING_AGG
$db_list_function = in_array($db->to_upper_dbms, ["SQLITE3", "MYSQL"]) ?
"GROUP_CONCAT" : "STRING_AGG";
$timestamp = floor(time() / self::UPDATE_PERIOD ) * self::UPDATE_PERIOD;
$condition = "ITEM_TYPE = ? AND USER_ID <> 2 AND" .
" ((UPDATE_PERIOD = ? AND UPDATE_TIMESTAMP = ?) OR" .
" (UPDATE_PERIOD = ?))";
- $impression_sql = "SELECT USER_ID, $db_list_function(ITEM_ID, ',') AS" .
- " ITEM_IDS FROM ITEM_IMPRESSION_SUMMARY WHERE $condition" .
- " GROUP BY USER_ID";
+ $impression_sql = "SELECT USER_ID, $db_list_function( " .
+ "CAST(ITEM_ID AS STRING), ',') AS " .
+ "ITEM_IDS FROM ITEM_IMPRESSION_SUMMARY WHERE $condition " .
+ "GROUP BY USER_ID";
$results = $db->execute($impression_sql,
[C\RESOURCE_IMPRESSION, self::UPDATE_PERIOD, $timestamp,
C\MOST_RECENT_VIEW]);