I have an SQL statement with 5 tables. Notice that in it I make up a radius calculation.
I need to add a new table of ratings with:
cod_avaliacao int (11) customer_code cod_provider decimal_value evaluation (10,0)
Where the avaliacao_geral
field wants to calculate the average according to the suppliers.
I've tried LEFT JOIN , RIGHT JOIN because there are vendors that do not have any evaluation and if you put INNER JOIN the result returns empty.
I also know that I have to use something like this in my SQL statement to return the average:
SELECT
cod_avaliacao,
cod_cliente,
cod_fornecedor,
AVG(avaliacao_geral)
FROM
avaliacao
GROUP BY cod_fornecedor
My SQL (without the 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));
?>