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; } } }