How to make an SQL (Mysql) query with medium and multiple INNER tables?

Asked

Viewed 528 times

1

I have an instruction SQL with 5 tables. Note that I make even a calculation of radius.

I need to add a new table of evaluations with:

cod_evaluation int(11) cod_client cod_supplier general decimal value(10,0)

Where the field avaliacao_geral I want to average according to suppliers.

I’ve tried to LEFT JOIN, RIGHT JOIN because there are suppliers who have no evaluation and put themselves INNER JOIN the result returns empty.

I also know I have to use something like this in my instruction SQL to return the average:

 SELECT 
       cod_avaliacao,
       cod_cliente,
       cod_fornecedor,
       AVG(avaliacao_geral)
    FROM
       avaliacao 
    GROUP BY cod_fornecedor

My SQL (No evaluation table):

    SELECT
   fornecedores.cod_fornecedor,
   fornecedores.fantasia,
   fornecedores.CPF,
   fornecedores.identidade,
   fornecedores.email,
   fornecedores.cep,
   fornecedores.logradourro,
   fornecedores.complemento,
   fornecedores.cidade,
   fornecedores.estado,
   fornecedores.responsavel_contato,
   fornecedores.telefone_empresa,
   fornecedores.telefone_responsavel,
   fornecedores.celular,
   fornecedores.bairro,
   fornecedores.numero,
   fornecedores.latitude,
   fornecedores.longitude,
   cadastra_oferta.cod_oferta,
   cadastra_oferta.cod_fornecedor,
   cadastra_oferta.cod_categoria_com,
   cadastra_oferta.titulo_promocao,
   cadastra_oferta.descricao,
   cadastra_oferta.foto,
   cadastra_oferta.valor_sem_desconto,
   cadastra_oferta.valor_com_desconto,
   cadastra_oferta.desconto,
   cadastra_oferta.validade_oferta,
   cadastra_oferta.igredientes,
   cadastra_oferta.qtd_estoque,
   categoria_comida.cod_categoria_com,
   categoria_comida.nome,
   categoria_comida.data_cadastro,
   fornecedor_credito.cod_fornecedor_codigo,
   fornecedor_credito.cod_fornecedor,
   fornecedor_credito.qtd_credito,
   fornecedor_configura_frete.cod_configura_frete,
   fornecedor_configura_frete.cod_fornecedor,
   fornecedor_configura_frete.tem_delivery,
   fornecedor_configura_frete.custo_padrao,
   fornecedor_configura_frete.frete_gratis,
   fornecedor_configura_frete.valor_minimo_frete_gratis,
   fornecedor_configura_frete.tipos_pagamentos,
   fornecedor_configura_frete.prazo_entrega_min,
   fornecedor_configura_frete.prazo_entrega_max,
   fornecedor_configura_frete.agenda_comida,
   fornecedor_configura_frete.dayw_one,
   fornecedor_configura_frete.dayw_two,
   fornecedor_configura_frete.dayw_three,
   fornecedor_configura_frete.dayw_four,
   fornecedor_configura_frete.dayw_five,
   fornecedor_configura_frete.dayw_six,
   fornecedor_configura_frete.dayw_seven,
   fornecedor_configura_frete.hour_ini_one,
   fornecedor_configura_frete.hour_end_one,
   fornecedor_configura_frete.hour_ini_two,
   fornecedor_configura_frete.hour_end_two,
   fornecedor_configura_frete.hour_ini_three,
   fornecedor_configura_frete.hour_end_three,
   fornecedor_configura_frete.hour_ini_four,
   fornecedor_configura_frete.hour_end_four,
   fornecedor_configura_frete.hour_ini_five,
   fornecedor_configura_frete.hour_end_five,
   fornecedor_configura_frete.hour_ini_six,
   fornecedor_configura_frete.hour_end_six,
   fornecedor_configura_frete.hour_ini_seven,
   fornecedor_configura_frete.hour_end_seven,
   fornecedor_visual.cod_fornecedor_visual,
   fornecedor_visual.cod_fornecedor,
   fornecedor_visual.descricao_empresa,
   fornecedor_visual.facebook,
   fornecedor_visual.localizacao_mapa,
   fornecedor_visual.logomarca,
   fornecedor_visual.data_cadastro,
   fornecedor_visual.latitude,
   fornecedor_visual.longitude,
   (6371 * acos(
        cos( radians('$latitude') )
        * cos( radians( fornecedores.latitude ) )
        * cos( radians( fornecedores.longitude ) - radians('$longitude') )
        + sin( radians('$latitude') )
        * sin( radians( fornecedores.latitude ) ) 
        )
    ) AS distancia

FROM   
   fornecedores INNER JOIN cadastra_oferta ON fornecedores.cod_fornecedor = cadastra_oferta.cod_fornecedor
   INNER JOIN categoria_comida ON cadastra_oferta.cod_categoria_com = categoria_comida.cod_categoria_com
   INNER JOIN fornecedor_credito ON fornecedores.cod_fornecedor = fornecedor_credito.cod_fornecedor
   INNER JOIN fornecedor_configura_frete ON fornecedores.cod_fornecedor = fornecedor_configura_frete.cod_fornecedor
   INNER JOIN fornecedor_visual ON fornecedores.cod_fornecedor = fornecedor_visual.cod_fornecedor     
WHERE 
   (fornecedor_credito.qtd_credito >= '1') AND
   (cadastra_oferta.qtd_estoque >= '1')  AND
   (cadastra_oferta.validade_oferta >= NOW()) 
HAVING distancia <= '$raio'
ORDER BY
   cadastra_oferta.titulo_promocao ASC

Now my entire PHP to understand, is a JSON:

<?php


header('Content-type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');



/** CONFIG:START **/
$config["host"]         = "" ;      //host
$config["user"]         = "" ;      //Username SQL
$config["pass"]         = "" ;      //Password SQL
$config["dbase"]        = "" ;      //Database
$config["limit"]        = 500 ;         //limit row
$config["abs_url_images"]       = "http://" ;       //Absolute Images URL
$config["abs_url_images"]       = "http://v" ;      //Absolute Images URL
$config["abs_url_logo"]         = "/admin/vovos/_lib/file/img/app_logo" ;       //Absolute Videos URL
$config["abs_url_logo"]         = admin/vovos/_lib/file/img/app_logo" ;         //Absolute Audio URL
/** CONFIG:END **/


$data_atual = date("d-m-Y"); 



$rest_api = array();
function utf8ize($d) {
    if (is_array($d)) {
        foreach ($d as $k => $v) {
            $d[$k] = utf8ize($v);
        }
    } else if (is_string ($d)) {
        return utf8_encode($d);
    }
    return $d;
}

/** connect to mysql **/
$mysql = new mysqli($config["host"], $config["user"], $config["pass"], $config["dbase"]);
if (mysqli_connect_errno()){
    die(mysqli_connect_error());
}




if(!isset($_GET["json"])){

    $_GET["json"]= "route";

}

$latitude = $_GET['latitude'];
$longitude = $_GET['longitude'];
$raio = $_GET['raio'];



switch($_GET["json"]){
    case "promocao":
        $sql = "SELECT
   fornecedores.cod_fornecedor,
   fornecedores.fantasia,
   fornecedores.CPF,
   fornecedores.identidade,
   fornecedores.email,
   fornecedores.cep,
   fornecedores.logradourro,
   fornecedores.complemento,
   fornecedores.cidade,
   fornecedores.estado,
   fornecedores.responsavel_contato,
   fornecedores.telefone_empresa,
   fornecedores.telefone_responsavel,
   fornecedores.celular,
   fornecedores.bairro,
   fornecedores.numero,
   fornecedores.latitude,
   fornecedores.longitude,
   cadastra_oferta.cod_oferta,
   cadastra_oferta.cod_fornecedor,
   cadastra_oferta.cod_categoria_com,
   cadastra_oferta.titulo_promocao,
   cadastra_oferta.descricao,
   cadastra_oferta.foto,
   cadastra_oferta.valor_sem_desconto,
   cadastra_oferta.valor_com_desconto,
   cadastra_oferta.desconto,
   cadastra_oferta.validade_oferta,
   cadastra_oferta.igredientes,
   cadastra_oferta.qtd_estoque,
   categoria_comida.cod_categoria_com,
   categoria_comida.nome,
   categoria_comida.data_cadastro,
   fornecedor_credito.cod_fornecedor_codigo,
   fornecedor_credito.cod_fornecedor,
   fornecedor_credito.qtd_credito,
   fornecedor_configura_frete.cod_configura_frete,
   fornecedor_configura_frete.cod_fornecedor,
   fornecedor_configura_frete.tem_delivery,
   fornecedor_configura_frete.custo_padrao,
   fornecedor_configura_frete.frete_gratis,
   fornecedor_configura_frete.valor_minimo_frete_gratis,
   fornecedor_configura_frete.tipos_pagamentos,
   fornecedor_configura_frete.prazo_entrega_min,
   fornecedor_configura_frete.prazo_entrega_max,
   fornecedor_configura_frete.agenda_comida,
   fornecedor_configura_frete.dayw_one,
   fornecedor_configura_frete.dayw_two,
   fornecedor_configura_frete.dayw_three,
   fornecedor_configura_frete.dayw_four,
   fornecedor_configura_frete.dayw_five,
   fornecedor_configura_frete.dayw_six,
   fornecedor_configura_frete.dayw_seven,
   fornecedor_configura_frete.hour_ini_one,
   fornecedor_configura_frete.hour_end_one,
   fornecedor_configura_frete.hour_ini_two,
   fornecedor_configura_frete.hour_end_two,
   fornecedor_configura_frete.hour_ini_three,
   fornecedor_configura_frete.hour_end_three,
   fornecedor_configura_frete.hour_ini_four,
   fornecedor_configura_frete.hour_end_four,
   fornecedor_configura_frete.hour_ini_five,
   fornecedor_configura_frete.hour_end_five,
   fornecedor_configura_frete.hour_ini_six,
   fornecedor_configura_frete.hour_end_six,
   fornecedor_configura_frete.hour_ini_seven,
   fornecedor_configura_frete.hour_end_seven,
   fornecedor_visual.cod_fornecedor_visual,
   fornecedor_visual.cod_fornecedor,
   fornecedor_visual.descricao_empresa,
   fornecedor_visual.facebook,
   fornecedor_visual.localizacao_mapa,
   fornecedor_visual.logomarca,
   fornecedor_visual.data_cadastro,
   fornecedor_visual.latitude,
   fornecedor_visual.longitude,
   (6371 * acos(
        cos( radians('$latitude') )
        * cos( radians( fornecedores.latitude ) )
        * cos( radians( fornecedores.longitude ) - radians('$longitude') )
        + sin( radians('$latitude') )
        * sin( radians( fornecedores.latitude ) ) 
        )
    ) AS distancia

FROM   
   fornecedores INNER JOIN cadastra_oferta ON fornecedores.cod_fornecedor = cadastra_oferta.cod_fornecedor
   INNER JOIN categoria_comida ON cadastra_oferta.cod_categoria_com = categoria_comida.cod_categoria_com
   INNER JOIN fornecedor_credito ON fornecedores.cod_fornecedor = fornecedor_credito.cod_fornecedor
   INNER JOIN fornecedor_configura_frete ON fornecedores.cod_fornecedor = fornecedor_configura_frete.cod_fornecedor
   INNER JOIN fornecedor_visual ON fornecedores.cod_fornecedor = fornecedor_visual.cod_fornecedor     
WHERE 
   (fornecedor_credito.qtd_credito >= '1') AND
   (cadastra_oferta.qtd_estoque >= '1')  AND
   (cadastra_oferta.validade_oferta >= NOW()) 
HAVING distancia <= '$raio'
ORDER BY
   cadastra_oferta.titulo_promocao ASC";      

        //AND (fornecedores.gcm_key <> '')


            // ADICIONAR QUANTO TUDO FICAR PRONTO NA INSTRUÇÃO SQL NA CLÁUSULA WHERE
            //    AND
            //(cadastra_oferta.validade_oferta >= CURDATE())

        if($result = $mysql->query($sql)){
            $z=0;
            while ($data = $result->fetch_array()){
                $rest_api[$z]['cadastra_oferta_cod_oferta'] = $data['cod_oferta']; # id
                $abs_url_images = $config['abs_url_images'].'/';
                $abs_url_logo = $config['abs_url_logo'].'/';
                $abs_url_logo = $config['abs_url_logo'].'/';

                if((substr($data['foto'], 0, 7)=='http://r/admin/vovos/_lib/file/img/app_img')||(substr($data['foto'], 0, 8)=='http://v.br/admin/vovos/_lib/file/img/app_img')){
                    $abs_url_images = $abs_url_logo  = $abs_url_logo = '';

                }if((substr($data['logomarca'], 0, 7)=='http://vr/admin/vovos/_lib/file/img/app_logo')||(substr($data['logomarca'], 0, 8)=='http://.br/admin/vovos/_lib/file/img/app_logo')){
                    $abs_url_images = $abs_url_logo  = $abs_url_logo = '';

                }


                 /** TABELA FORNECEDORES **/     
                $rest_api[$z]['fornecedores_fantasia'] = $data['fantasia'];  
                $rest_api[$z]['fornecedores_CPF'] = $data['CPF']; 
                $rest_api[$z]['fornecedores_identidade'] = $data['identidade'];                 
                $rest_api[$z]['fornecedores_bairro'] = $data['bairro'];  
                $rest_api[$z]['fornecedores_celular'] = $data['celular']; 
                $rest_api[$z]['fornecedores_cep'] = $data['cep'];
                $rest_api[$z]['fornecedores_cidade'] = $data['cidade'];             
                $rest_api[$z]['fornecedores_cod_fornecedor'] = $data['cod_fornecedor']; 
                $rest_api[$z]['fornecedores_complemento'] = $data['complemento'];               
                $rest_api[$z]['fornecedores_data_hora_cadastro'] = $data['data_hora_cadastro'];
                $rest_api[$z]['fornecedores_email'] = $data['email']; 
                $rest_api[$z]['fornecedores_estado'] = $data['estado'];                 
                $rest_api[$z]['fornecedores_logradourro'] = $data['logradourro'];
                $rest_api[$z]['fornecedores_numero'] = $data['numero'];                
                $rest_api[$z]['fornecedores_responsavel_contato'] = $data['responsavel_contato'];
                $rest_api[$z]['fornecedores_telefone_empresa'] = $data['telefone_empresa'];
                $rest_api[$z]['fornecedores_telefone_responsavel'] = $data['telefone_responsavel'];  
                $rest_api[$z]['fornecedores_celular'] = $data['celular'];                  


                /** TABELA OFERTAS **/                                      
                $rest_api[$z]['cadastra_oferta_foto'] = $abs_url_images . $data['foto']; # images
                $rest_api[$z]['cadastra_oferta_titulo_promocao'] = $data['titulo_promocao']; # heading-1
                $rest_api[$z]['cadastra_oferta_cod_fornecedor'] = $data['cod_fornecedor']; # heading-2
                $rest_api[$z]['cadastra_oferta_cod_categoria'] = $data['cod_categoria']; # heading-2
                $rest_api[$z]['cadastra_oferta_descricao'] = $data['descricao']; # paragraph
                $rest_api[$z]['cadastra_oferta_igredientes'] = $data['igredientes']; # paragraph                
                $rest_api[$z]['cadastra_oferta_valor_sem_desconto'] = $data['valor_sem_desconto']; # text
                $rest_api[$z]['cadastra_oferta_valor_com_desconto'] = floatval($data['valor_com_desconto']); # text
                $rest_api[$z]['cadastra_oferta_desconto'] = floatval($data['desconto']); # text
                $rest_api[$z]['cadastra_oferta_validade_oferta'] = $data['validade_oferta']; # text
                $rest_api[$z]['cadastra_oferta_qtd_estoque'] = $data['qtd_estoque']; # text



                /**  CATEGORIA COMIDA .....  **/
                $rest_api[$z]['categoria_comida_cod_categoria_com'] = $data['cod_categoria_com'];  
                $rest_api[$z]['categoria_comida_data_cadastro'] = $data['data_cadastro']; 
                $rest_api[$z]['categoria_comida_nome'] = $data['nome'];               


                 /** FORNECEDOR CREDITO .....  **/
                $rest_api[$z]['fornecedor_credito_cod_fornecedor'] = $data['cod_fornecedor']; 
                $rest_api[$z]['fornecedor_credito_cod_fornecedor_codigo'] = $data['cod_fornecedor_codigo'];
                $rest_api[$z]['fornecedor_credito_qtd_credito'] = $data['qtd_credito'];       

                   /** TABELA FORNECEDOR_VISUAL **/

//                $rest_api[$z]['fornecedor_visual_cod_fornecedor'] = $data['cod_fornecedor']; 
                $rest_api[$z]['fornecedor_visual_cod_fornecedor_visual'] = $data['.cod_fornecedor_visual'];
                $rest_api[$z]['fornecedor_visual_data_cadastro'] = $data['data_cadastro'];
                $rest_api[$z]['fornecedor_visual_descricao_empresa'] = $data['descricao_empresa'];
                $rest_api[$z]['fornecedor_visual_facebook'] = $data['facebook'];
                $rest_api[$z]['fornecedor_visual_logomarca'] = $abs_url_logo . $data['logomarca']; # images 
                $rest_api[$z]['fornecedor_visual_latitude'] = $data['latitude'];
                $rest_api[$z]['fornecedor_visual_longitude'] = $data['longitude'];

                 /** TABELA FORNECEDOR_CONFIGURA_FRETE **/

                $rest_api[$z]['fornecedor_configura_frete_agenda_comida'] = $data['agenda_comida']; 
                $rest_api[$z]['fornecedor_configura_frete_cod_configura_frete'] = $data['cod_configura_frete'];
                $rest_api[$z]['fornecedor_configura_frete_cod_fornecedor'] = $data['cod_fornecedor'];
                $rest_api[$z]['fornecedor_configura_frete_custo_padrao'] = floatval($data['custo_padrao']);
                $rest_api[$z]['fornecedor_configura_frete_frete_gratis'] = $data['frete_gratis'];
                $rest_api[$z]['fornecedor_configura_frete_prazo_entrega_max'] = $data['prazo_entrega_max'];
                $rest_api[$z]['fornecedor_configura_frete_prazo_entrega_min'] = $data['prazo_entrega_min']; 
                $rest_api[$z]['fornecedor_configura_frete_tem_delivery'] = $data['tem_delivery']; 
                $rest_api[$z]['fornecedor_configura_frete_tipos_pagamentos'] = $data['tipos_pagamentos'];
                $rest_api[$z]['fornecedor_configura_frete_valor_minimo_frete_gratis'] = $data['valor_minimo_frete_gratis'];                
                $rest_api[$z]['fornecedor_configura_frete_dayw_one'] = $data['dayw_one'];
                $rest_api[$z]['fornecedor_configura_frete_dayw_two'] = $data['dayw_two'];
                $rest_api[$z]['fornecedor_configura_frete_dayw_three'] = $data['dayw_three'];
                $rest_api[$z]['fornecedor_configura_frete_dayw_four'] = $data['dayw_four'];
                $rest_api[$z]['fornecedor_configura_frete_dayw_five'] = $data['dayw_five'];
                $rest_api[$z]['fornecedor_configura_frete_dayw_six'] = $data['dayw_six'];
                $rest_api[$z]['fornecedor_configura_frete_dayw_seven'] = $data['dayw_seven'];
                $rest_api[$z]['fornecedor_configura_frete_hour_ini_one'] = $data['hour_ini_one'];
                $rest_api[$z]['fornecedor_configura_frete_hour_end_one'] = $data['hour_end_one'];
                $rest_api[$z]['fornecedor_configura_frete_hour_ini_two'] = $data['hour_ini_two'];
                $rest_api[$z]['fornecedor_configura_frete_hour_end_two'] = $data['hour_end_two'];
                $rest_api[$z]['fornecedor_configura_frete_hour_ini_three'] = $data['hour_ini_three'];
                $rest_api[$z]['fornecedor_configura_frete_hour_end_three'] = $data['hour_end_three'];
                $rest_api[$z]['fornecedor_configura_frete_hour_ini_four'] = $data['hour_ini_four'];
                $rest_api[$z]['fornecedor_configura_frete_hour_end_four'] = $data['hour_end_four'];
                $rest_api[$z]['fornecedor_configura_frete_hour_ini_five'] = $data['hour_ini_five'];
                $rest_api[$z]['fornecedor_configura_frete_hour_end_five'] = $data['hour_end_five'];
                $rest_api[$z]['fornecedor_configura_frete_hour_ini_six'] = $data['hour_ini_six'];
                $rest_api[$z]['fornecedor_configura_frete_hour_end_six'] = $data['hour_end_six'];
                $rest_api[$z]['fornecedor_configura_frete_hour_ini_seven'] = $data['hour_ini_seven'];
                $rest_api[$z]['fornecedor_configura_frete_hour_end_seven'] = $data['hour_end_seven'];




                  /** TABELA AVALIAÇÕES **/
//              $rest_api[$z]['avaliacao_cod_avaliacao'] = $data['cod_avaliacao'];
//                $rest_api[$z]['avaliacao_cod_fornecedor'] = $data['cod_fornecedor'];
//                $rest_api[$z]['avaliacao_geral'] = floatval($data['avaliacao_geral']);




                $z++;
            }
            $result->close();
        } 

        break;

    case "route":
        $rest_api["routes"][0]["namespace"] = "promocao";
        $rest_api["routes"][0]["methods"][] = "GET";
        $rest_api["routes"][0]["_links"]["self"] = $_SERVER["PHP_SELF"]."?json=promocao";
        $rest_api["routes"][1]["namespace"] = "restaurantes";
        $rest_api["routes"][1]["methods"][] = "GET";
        $rest_api["routes"][1]["_links"]["self"] = $_SERVER["PHP_SELF"]."?json=restaurantes";
        break;
}


header('Content-type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
echo json_encode(utf8ize($rest_api));

?>

1 answer

2


use a sub-select:

   (select avg(avaliacoes.avaliacao_geral) from avaliacoes where avaliacoes.cod_fornecedor = fornecedores.cod_fornecedor ) as media_avaliacao

Full query:

SELECT
   (select avg(avaliacoes.avaliacao_geral) from avaliacoes where avaliacoes.cod_fornecedor = fornecedores.cod_fornecedor ) as media_avaliacao,
   fornecedores.cod_fornecedor,
   fornecedores.fantasia,
   fornecedores.CPF,
   fornecedores.identidade,
   fornecedores.email,
   fornecedores.cep,
   fornecedores.logradourro,
   fornecedores.complemento,
   fornecedores.cidade,
   fornecedores.estado,
   fornecedores.responsavel_contato,
   fornecedores.telefone_empresa,
   fornecedores.telefone_responsavel,
   fornecedores.celular,
   fornecedores.bairro,
   fornecedores.numero,
   fornecedores.latitude,
   fornecedores.longitude,
   cadastra_oferta.cod_oferta,
   cadastra_oferta.cod_fornecedor,
   cadastra_oferta.cod_categoria_com,
   cadastra_oferta.titulo_promocao,
   cadastra_oferta.descricao,
   cadastra_oferta.foto,
   cadastra_oferta.valor_sem_desconto,
   cadastra_oferta.valor_com_desconto,
   cadastra_oferta.desconto,
   cadastra_oferta.validade_oferta,
   cadastra_oferta.igredientes,
   cadastra_oferta.qtd_estoque,
   categoria_comida.cod_categoria_com,
   categoria_comida.nome,
   categoria_comida.data_cadastro,
   fornecedor_credito.cod_fornecedor_codigo,
   fornecedor_credito.cod_fornecedor,
   fornecedor_credito.qtd_credito,
   fornecedor_configura_frete.cod_configura_frete,
   fornecedor_configura_frete.cod_fornecedor,
   fornecedor_configura_frete.tem_delivery,
   fornecedor_configura_frete.custo_padrao,
   fornecedor_configura_frete.frete_gratis,
   fornecedor_configura_frete.valor_minimo_frete_gratis,
   fornecedor_configura_frete.tipos_pagamentos,
   fornecedor_configura_frete.prazo_entrega_min,
   fornecedor_configura_frete.prazo_entrega_max,
   fornecedor_configura_frete.agenda_comida,
   fornecedor_configura_frete.dayw_one,
   fornecedor_configura_frete.dayw_two,
   fornecedor_configura_frete.dayw_three,
   fornecedor_configura_frete.dayw_four,
   fornecedor_configura_frete.dayw_five,
   fornecedor_configura_frete.dayw_six,
   fornecedor_configura_frete.dayw_seven,
   fornecedor_configura_frete.hour_ini_one,
   fornecedor_configura_frete.hour_end_one,
   fornecedor_configura_frete.hour_ini_two,
   fornecedor_configura_frete.hour_end_two,
   fornecedor_configura_frete.hour_ini_three,
   fornecedor_configura_frete.hour_end_three,
   fornecedor_configura_frete.hour_ini_four,
   fornecedor_configura_frete.hour_end_four,
   fornecedor_configura_frete.hour_ini_five,
   fornecedor_configura_frete.hour_end_five,
   fornecedor_configura_frete.hour_ini_six,
   fornecedor_configura_frete.hour_end_six,
   fornecedor_configura_frete.hour_ini_seven,
   fornecedor_configura_frete.hour_end_seven,
   fornecedor_visual.cod_fornecedor_visual,
   fornecedor_visual.cod_fornecedor,
   fornecedor_visual.descricao_empresa,
   fornecedor_visual.facebook,
   fornecedor_visual.localizacao_mapa,
   fornecedor_visual.logomarca,
   fornecedor_visual.data_cadastro,
   fornecedor_visual.latitude,
   fornecedor_visual.longitude,
   (6371 * acos(
        cos( radians('$latitude') )
        * cos( radians( fornecedores.latitude ) )
        * cos( radians( fornecedores.longitude ) - radians('$longitude') )
        + sin( radians('$latitude') )
        * sin( radians( fornecedores.latitude ) ) 
        )
    ) AS distancia

FROM   
   fornecedores INNER JOIN cadastra_oferta ON fornecedores.cod_fornecedor = cadastra_oferta.cod_fornecedor
   INNER JOIN categoria_comida ON cadastra_oferta.cod_categoria_com = categoria_comida.cod_categoria_com
   INNER JOIN fornecedor_credito ON fornecedores.cod_fornecedor = fornecedor_credito.cod_fornecedor
   INNER JOIN fornecedor_configura_frete ON fornecedores.cod_fornecedor = fornecedor_configura_frete.cod_fornecedor
   INNER JOIN fornecedor_visual ON fornecedores.cod_fornecedor = fornecedor_visual.cod_fornecedor     
WHERE 
   (fornecedor_credito.qtd_credito >= '1') AND
   (cadastra_oferta.qtd_estoque >= '1')  AND
   (cadastra_oferta.validade_oferta >= NOW()) 
HAVING distancia <= '$raio'
ORDER BY
   cadastra_oferta.titulo_promocao ASC
  • Solved. Thank you @Rovan Linhalis.

  • 1

    @Rovan Linhalis, it would be good for the community and future readers if, along with the answer, you add an explanation, citing the reason you used a sub select. Giving the answer "hand kissed" is not well seen by the community for not adding knowledge. No more, congratulations for the answer.

  • @Thiagobarros agree, and I usually do this, but it seemed to me so simple the subselect, that passed beaten. Ramos, if there are too many records can perform poorly or subselect, if so there is also the possibility to use a temporary table.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.