浏览代码

user assign to order : use multiple queries (otherwise SQL engine is deadly stuck

Mathieu Moulin 6 月之前
父节点
当前提交
3a1b883b04
共有 1 个文件被更改,包括 52 次插入15 次删除
  1. 52 15
      src/manual/customer.inc.php

+ 52 - 15
src/manual/customer.inc.php

@@ -22,7 +22,7 @@ $comm_map_pd = array_flip($comm_map_dp);
 $map_pd = array_flip($map_dp);
 
 $nbmax = isset($_GET['nbmax']) && is_numeric($_GET['nbmax']) && $_GET['nbmax']==(int)$_GET['nbmax'] && $_GET['nbmax']>=0 ?$_GET['nbmax'] :5000;
-$limit = $nbmax!=5000 ?$nbmax :0;
+$limit = $nbmax;
 
 $sql_d_fk_commerciaux = implode(',', $comm_map_pd);
 $sql_p_fk_commerciaux = implode(',', $comm_map_dp);
@@ -198,30 +198,68 @@ if (isset($_GET['propal_assoc'])) {
 if (isset($_GET['order_assoc'])) {
     $sql = 'SELECT o.rowid o_rowid, o.ref o_ref, o.fk_user_author o_fk_user_author, o.fk_user_modif o_fk_user_modif, o.fk_user_valid o_fk_user_valid,
         s.rowid, s.nom, s.email, GROUP_CONCAT(DISTINCT su.fk_user SEPARATOR ",") fk_users, s.fk_user_creat, s.fk_user_modif,
-        p.rowid p_rowid, p.ref p_ref, p.fk_user_author p_fk_user_author, p.fk_user_modif p_fk_user_modif, p.fk_user_valid p_fk_user_valid,
-        GROUP_CONCAT(DISTINCT ao.fk_user_action SEPARATOR ",") o_actioncom_fk_user, COUNT(DISTINCT ao.fk_user_action) o_actioncom_fk_user_nb, GROUP_CONCAT(DISTINCT ps_oh.id_employee SEPARATOR ",") o_history_ids_employee,
-        GROUP_CONCAT(DISTINCT ap.fk_user_action SEPARATOR ",") p_actioncom_fk_user, COUNT(DISTINCT ap.fk_user_action) p_actioncom_fk_user_nb,
-        GROUP_CONCAT(DISTINCT ep.fk_socpeople) ep_fk_user
+        GROUP_CONCAT(DISTINCT ao.fk_user_action SEPARATOR ",") o_actioncom_fk_user, COUNT(DISTINCT ao.fk_user_action) o_actioncom_fk_user_nb
 
     FROM `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'commande` o
-    INNER JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'societe` s
-        ON s.rowid=o.fk_soc
     LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact` e
         ON e.element_id=o.rowid AND e.fk_c_type_contact IN ('.implode(',', array_keys($contacts['commande'])).')
 
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'societe` s
+        ON s.rowid=o.fk_soc
     LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'societe_commerciaux` su
         ON su.fk_soc=s.rowid
 
     LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'actioncomm` ao
         ON ao.fk_soc=s.rowid AND ao.elementtype="commande" AND ao.fk_element=o.rowid
+    
+    WHERE 1
+        AND e.fk_socpeople IS NULL
+
+    GROUP BY o.rowid
+    ORDER BY o.rowid DESC'
+    .($limit ?' LIMIT '.$limit :'');
+    pre_sql($sql);
+    $q = DB::o_select($sql);
+    var_dump($q);
+    while($row=$q->fetch_assoc()) { 
+        $list[$row['o_rowid']] = $row;
+    }
+
+    $sql = 'SELECT o.rowid o_rowid, GROUP_CONCAT(DISTINCT ps_oh.id_employee SEPARATOR ",") o_history_ids_employee
 
+    FROM `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'commande` o
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact` e
+        ON e.element_id=o.rowid AND e.fk_c_type_contact IN ('.implode(',', array_keys($contacts['commande'])).')
+    
     LEFT JOIN `'.DB_BASE.'`._objects_d o_d
         ON o_d.oid=o.rowid AND o_d.tid=14
     LEFT JOIN `'.DB_BASE.'`._objects_p o_p
         ON o_p.id=o_d.id
     LEFT JOIN `'.DB_P_BASE.'`.ps_order_history ps_oh
         ON ps_oh.id_order=o_p.oid AND ps_oh.id_employee IN ('.$sql_p_fk_users.')
+    
+    WHERE 1
+        AND e.fk_socpeople IS NULL
 
+    GROUP BY o.rowid
+    ORDER BY o.rowid DESC'
+    .($limit ?' LIMIT '.$limit :'');
+    pre_sql($sql);
+    $q = DB::o_select($sql);
+    var_dump($q);
+    while($row=$q->fetch_assoc()) { 
+        $list[$row['o_rowid']] = array_merge($list[$row['o_rowid']], $row);
+    }
+
+    $sql = 'SELECT o.rowid o_rowid,
+        p.rowid p_rowid, p.ref p_ref, p.fk_user_author p_fk_user_author, p.fk_user_modif p_fk_user_modif, p.fk_user_valid p_fk_user_valid,
+        GROUP_CONCAT(DISTINCT ap.fk_user_action SEPARATOR ",") p_actioncom_fk_user, COUNT(DISTINCT ap.fk_user_action) p_actioncom_fk_user_nb,
+        GROUP_CONCAT(DISTINCT ep.fk_socpeople) ep_fk_user
+
+    FROM `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'commande` o
+    LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_contact` e
+        ON e.element_id=o.rowid AND e.fk_c_type_contact IN ('.implode(',', array_keys($contacts['commande'])).')
+    
     LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'element_element` ee
         ON (ee.sourcetype="commande" AND ee.fk_source=o.rowid)
             OR (ee.targettype="commande" AND ee.fk_target=o.rowid)
@@ -233,7 +271,7 @@ if (isset($_GET['order_assoc'])) {
         ON ep.element_id=p.rowid AND ep.fk_c_type_contact IN ('.implode(',', array_keys($contacts['propal'])).')
 
     LEFT JOIN `'.DB_D_BASE.'`.`'.DB_D_PREFIX.'actioncomm` ap
-        ON ap.fk_soc=s.rowid AND ap.elementtype="propal" AND ap.fk_element=p.rowid
+        ON ap.fk_soc=o.fk_soc AND ap.elementtype="propal" AND ap.fk_element=p.rowid
     
     WHERE 1
         AND e.fk_socpeople IS NULL
@@ -241,19 +279,18 @@ if (isset($_GET['order_assoc'])) {
     GROUP BY o.rowid
     ORDER BY o.rowid DESC'
     .($limit ?' LIMIT '.$limit :'');
-    $q = DB::o_select($sql);
-
     pre_sql($sql);
+    $q = DB::o_select($sql);
     var_dump($q);
+    while($row=$q->fetch_assoc()) { 
+        $list[$row['o_rowid']] = array_merge($list[$row['o_rowid']], $row);
+    }
 
-    echo '<p>TOTAL : '.mysqli_num_rows($q).'</p>';
+    echo '<p>TOTAL : '.count($list).'</p>';
 
     $ok = 0;
     $nb = 0;
-    while($row=$q->fetch_assoc()) {
-        $nb++;
-        if ($nb>$nbmax)
-            break;
+    foreach($list as $row) {
         pre_dump($row);
         $u = [];
         foreach(['p_fk_user_author', 'p_fk_user_modif', 'p_fk_user_valid', 'o_fk_user_author', 'o_fk_user_modif', 'o_fk_user_valid'] as $k) if ($row[$k]>0)