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));
?>
Solved. Thank you @Rovan Linhalis.
– Ramos
@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.
– Cobra
@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.
– Rovann Linhalis