Beispiel #1
0
 public function MySQLJoinFetchRow($params, &$debug = false)
 {
     $query = isset($params['query']) && !empty($params['query']) ? $params['query'] : false;
     $query = isset($params) && !is_array($params) ? $params : $query;
     $order_by = isset($params['order_by']) && !empty($params['order_by']) ? $params['order_by'] : false;
     $condition = isset($params['condition']) && !empty($params['condition']) ? strtoupper($params['condition']) : 'AND';
     $operator = isset($params['operator']) && !empty($params['operator']) ? strtoupper($params['operator']) : '=';
     $order = isset($params['order']) && !empty($params['order']) ? $params['order'] : false;
     $by = isset($params['by']) && !empty($params['by']) ? $params['by'] : false;
     $params = $this->PrepForStorage($params);
     $join_type = isset($params['join_type']) && $params['join_type'] ? $params['join_type'] : 'left';
     $left_table['select_items'] = SERVER::isthere($params['left_table']['select_items']);
     $left_table['join'] = SERVER::isthere($params['left_table']['join']);
     $left_table['table'] = SERVER::isthere($params['left_table']['table']);
     $left_table['where_items'] = SERVER::isthere($params['left_table']['where_items']);
     $right_table['select_items'] = SERVER::isthere($params['right_table']['select_items']);
     $right_table['join'] = SERVER::isthere($params['right_table']['join']);
     $right_table['table'] = SERVER::isthere($params['right_table']['table']);
     $right_table['where_items'] = SERVER::isthere($params['right_table']['where_items']);
     $row_key = isset($params['row_key']) && $params['row_key'] ? $params['row_key'] : false;
     $random = isset($params['random']) && !empty($params['random']) ? true : false;
     $group_by = isset($params['group_by']) && !empty($params['group_by']) ? $params['group_by'] : false;
     $limit = isset($params['limit']) && !empty($params['limit']) ? $params['limit'] : false;
     $offset = isset($params['offset']) && !empty($params['offset']) ? $params['offset'] : false;
     $execute = is_array($params) && isset($params['execute']) && !$params['execute'] ? false : true;
     $print = is_array($params) && isset($params['print']) && $params['print'] == true ? true : false;
     $debug = $debug && $this->debug_backtrace ? $debug : debug_backtrace();
     if (!$query) {
         if (!empty($left_table['select_items'])) {
             if ($left_table['select_items'] && !empty($left_table['select_items']) && is_array($left_table['select_items']) && reset($left_table['select_items']) != '*') {
                 $select_sql['left'] = $this->CompileMySQL(array('items' => $left_table['select_items'], 'value_only' => true, 'condition' => ',', 'table' => $this->db_pointer . $left_table['table'] . '.'));
                 $select_sql['left'] = trim($select_sql['left']);
             } elseif ($left_table['select_items'] == '*' || reset($left_table['select_items']) == '*') {
                 $select_sql['left'] = '*';
             } else {
                 $select_sql['left'] = '';
             }
         }
         if (!isset($select_sql['left']) || empty($select_sql['left'])) {
             $select_sql['left'] = '';
         }
         if (!empty($right_table['select_items'])) {
             if ($right_table['select_items'] && !empty($right_table['select_items']) && is_array($right_table['select_items']) && reset($right_table['select_items']) != '*') {
                 $select_sql['right'] = $this->CompileMySQL(array('items' => $right_table['select_items'], 'value_only' => true, 'condition' => ',', 'table' => $this->db_pointer . $right_table['table'] . '.'));
                 $select_sql['right'] = trim($select_sql['right']);
             } elseif ($right_table['select_items'] == '*' || reset($right_table['select_items']) == '*') {
                 $select_sql['right'] = '*';
             }
         }
         if (!isset($select_sql['right']) || empty($select_sql['right'])) {
             $select_sql['right'] = '';
         }
         if ($select_sql['left'] == '*' || $select_sql['right'] == '*') {
             $select_sql = '*';
         } else {
             if (!empty($select_sql['left']) && !empty($select_sql['right'])) {
                 $select_sql = implode(', ', $select_sql);
             } else {
                 $select_sql = implode('', $select_sql);
             }
         }
         $select_sql = "SELECT {$select_sql}";
         $from_sql = 'FROM ' . $this->db_pointer . $left_table['table'] . ' ' . strtoupper($join_type) . ' JOIN ' . $this->db_pointer . $right_table['table'];
         $on_sql = 'ON ' . $this->db_pointer . $left_table['table'] . '.' . $left_table['join'] . ' = ' . $this->db_pointer . $right_table['table'] . '.' . $right_table['join'];
         //WHERE
         if ($left_table['where_items'] === 1 || $right_table['where_items'] === 1 || $left_table['where_items'] === '1' || $right_table['where_items'] === '1') {
             $where_sql = "1 = '1'";
         } else {
             if ($left_table['where_items'] && !empty($left_table['where_items']) && is_array($left_table['where_items'])) {
                 $where_sql['left'] = $this->CompileMySQL(array('items' => $left_table['where_items'], 'item_wrapper' => array("'", "'"), 'condition' => $condition, 'operator' => $operator, 'table' => $this->db_pointer . $left_table['table'] . '.'));
                 $where_sql['left'] = trim($where_sql['left']);
             } else {
                 $where_sql['left'] = '';
             }
             if ($right_table['where_items'] && !empty($right_table['where_items']) && is_array($right_table['where_items'])) {
                 $where_sql['right'] = $this->CompileMySQL(array('items' => $right_table['where_items'], 'item_wrapper' => array("'", "'"), 'condition' => $condition, 'operator' => $operator, 'table' => $this->db_pointer . $right_table['table'] . '.'));
                 $where_sql['right'] = trim($where_sql['right']);
             } else {
                 $where_sql['right'] = '';
             }
             if ($where_sql['left'] == '*' || $where_sql['right'] == '*') {
                 $where_sql = '*';
             } else {
                 if (!empty($where_sql['left']) && !empty($where_sql['right'])) {
                     $where_sql = implode(" {$condition} ", $where_sql);
                 } else {
                     $where_sql = implode('', $where_sql);
                 }
             }
         }
         $where_sql = $where_sql ? "WHERE {$where_sql}" : false;
         if ($random) {
             $order_sql = "ORDER BY rand()";
         } elseif ($order_by || $by || $order) {
             if ($by) {
                 $accepted_ASC = array('up', 'increasing', 'increase', 'growing', 'ASC', 'ascending');
                 if (in_array(strtolower($order), $accepted_ASC)) {
                     $order = 'ASC';
                 } else {
                     $order = 'DESC';
                 }
                 $order_sql = "ORDER BY {$by} {$order}";
             } elseif ($order_by) {
                 $order_sql = "ORDER BY {$order_by}";
             }
         } else {
             $order_sql = false;
         }
         //GROUP BY
         $group_by_sql = $group_by ? "GROUP BY {$group_by}" : false;
         //LIMIT
         $limit_sql = $limit ? "LIMIT {$limit}" : false;
         //OFFSET
         $offset_sql = $offset ? "OFFSET {$offset}" : false;
         //QUERY
         $query = "{$select_sql} {$from_sql} {$on_sql} {$where_sql} {$group_by_sql} {$order_sql} {$limit_sql} {$offset_sql}; ";
     }
     //EXECUTE
     if ($query) {
         if ($print) {
             print $query;
         }
         if ($execute) {
             return $this->MySQLFetch($query, $debug, $row_key);
         } else {
             return $query;
         }
     }
 }