Skip to content
Extraits de code Groupes Projets
Valider e41ee6f2 rédigé par Marcin Czołnowski's avatar Marcin Czołnowski
Parcourir les fichiers

Change handling of tables using for join in segment.

parent e76584d7
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -499,35 +499,70 @@ class LogAggregator
*/
public function queryEcommerceItems($dimension)
{
$select = array(
"name as label",
self::getSqlRevenue('SUM(quantity * price)') . " as `" . Metrics::INDEX_ECOMMERCE_ITEM_REVENUE . "`",
self::getSqlRevenue('SUM(quantity)') . " as `" . Metrics::INDEX_ECOMMERCE_ITEM_QUANTITY . "`",
self::getSqlRevenue('SUM(price)') . " as `" . Metrics::INDEX_ECOMMERCE_ITEM_PRICE . "`",
"count(distinct idorder) as `" . Metrics::INDEX_ECOMMERCE_ORDERS . "`",
"count(log_conversion_item.idvisit) as `" . Metrics::INDEX_NB_VISITS . "`",
"case idorder when '0' then " . GoalManager::IDGOAL_CART . " else " . GoalManager::IDGOAL_ORDER . " end as ecommerceType"
);
$query = $this->generateQuery(
// SELECT ...
implode(
', ',
array(
"log_action.name AS label",
sprintf(
'%s AS `%d`',
self::getSqlRevenue('SUM(log_conversion_item.quantity * log_conversion_item.price)'),
Metrics::INDEX_ECOMMERCE_ITEM_REVENUE
),
sprintf(
'%s AS `%d`',
self::getSqlRevenue('SUM(log_conversion_item.quantity)'),
Metrics::INDEX_ECOMMERCE_ITEM_QUANTITY
),
sprintf(
'%s AS `%d`',
self::getSqlRevenue('SUM(log_conversion_item.price)'),
Metrics::INDEX_ECOMMERCE_ITEM_PRICE
),
sprintf(
'COUNT(DISTINCT log_conversion_item.idorder) AS `%d`',
Metrics::INDEX_ECOMMERCE_ORDERS
),
sprintf(
'COUNT(log_conversion_item.idvisit) AS `%d`',
Metrics::INDEX_NB_VISITS
),
sprintf(
'CASE log_conversion_item.idorder WHEN \'0\' THEN %d ELSE %d END AS ecommerceType',
GoalManager::IDGOAL_CART,
GoalManager::IDGOAL_ORDER
)
)
),
$from = array(
"log_conversion_item",
// FROM ...
array(
"table" => "log_action",
"joinOn" => sprintf("log_conversion_item.%s = log_action.idaction", $dimension)
"log_conversion_item",
array(
"table" => "log_action",
"joinOn" => sprintf("log_conversion_item.%s = log_action.idaction", $dimension)
)
),
array(
"table" => "log_visit",
"joinOn" => "log_conversion_item.idvisit = log_visit.idvisit"
)
);
$where = "server_time >= ? AND server_time <= ? AND log_conversion_item.idsite = ? AND deleted = 0";
$groupBy = sprintf("ecommerceType, %s", $dimension);
$query = $this->generateQuery(
implode(", ", $select),
$from,
$where,
$groupBy,
// WHERE ... AND ...
implode(
' AND ',
array(
'log_conversion_item.server_time >= ?',
'log_conversion_item.server_time <= ?',
'log_conversion_item.idsite = ?',
'log_conversion_item.deleted = 0'
)
),
// GROUP BY ...
sprintf(
"ecommerceType, log_conversion_item.%s",
$dimension
),
// ORDER ...
false
);
......
......@@ -278,7 +278,7 @@ class Segment
private function generateJoins($tables)
{
$knownTables = array("log_visit", "log_link_visit_action", "log_conversion", "log_conversion_item");
$visitsAvailable = $actionsAvailable = $conversionsAvailable = $conversionsAvailableItem = false;
$visitsAvailable = $actionsAvailable = $conversionsAvailable = $conversionItemAvailable = false;
$joinWithSubSelect = false;
$sql = '';
......@@ -300,14 +300,6 @@ class Segment
$tables[$visitIndex] = "log_link_visit_action";
}
$conversionsAvailableItem = array_search("log_conversion_item", $tables);
if ($conversionsAvailableItem > -1) {
$visitIndex = array_search("log_visit", $tables);
if ($visitIndex > -1) {
unset ($tables[$visitIndex]);
}
}
foreach ($tables as $i => $table) {
if (is_array($table)) {
// join condition provided
......@@ -356,8 +348,11 @@ class Segment
if ($table == "log_conversion") {
$joinWithSubSelect = true;
}
} elseif ($table === 'log_conversion_item') {
} elseif ($conversionItemAvailable && $table === 'log_visit') {
$join = "log_conversion_item.idvisit = log_visit.idvisit";
} elseif ($conversionItemAvailable && $table === 'log_link_visit_action') {
$joinWithSubSelect = true;
$join = "log_conversion_item.idvisit = log_link_visit_action.idvisit";
} else {
throw new Exception("Table '$table', can't be joined for segmentation");
}
......@@ -371,6 +366,7 @@ class Segment
$visitsAvailable = ($visitsAvailable || $table == "log_visit");
$actionsAvailable = ($actionsAvailable || $table == "log_link_visit_action");
$conversionsAvailable = ($conversionsAvailable || $table == "log_conversion");
$conversionItemAvailable = ($conversionItemAvailable || $table == "log_conversion_item");
}
return array(
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter