Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Foxbh

Duplo ALIAS

Recommended Posts

Galera, desculpa o incomodo, mais e que to apanhando aqui para dar um ALIAS Duplo nesta consulta

Tenho uma tabela chamada carros, e cada carro pode ser avaliada por diferentes usuários, ate ai tudo bem, criei uma tabela secundaria chamada avaliações e cada carro pode ser avaliado por vários usuários diferentes.

Agora preciso que cada carro mostre uma avaliação geral, que e pegar todas as avaliações de todos os usuários em um determinado carro e mostrar em uma lista com todos os carros.

Ai que esta minha duvida, como recuperar as avaliações da tabela avaliação. e quantas pessoas votaram

Inseri a Tabela para melhor entender, vou pegar so a somatória da avaliação geral e quantas pessoas avaliaram o mesmo carro exemplo

Com este SELECT eu consigo pegar o que eu preciso, mais não estou consegindo exibir a quantidade de avaliações ( geral_ava )

 

 

Aqui esta o exemplo do codigo funcionando

http://sqlfiddle.com/#!9/23cfaf/6

SELECT *, (SELECT COUNT(*) FROM avaliacao WHERE id_car_ava=id_car ),(SELECT SUM(geral_ava) FROM avaliacao WHERE id_car_ava = id_car ) AS QT FROM carros

As tabelas do BD são estas

CREATE TABLE IF NOT EXISTS `avaliacao` (
  `id_ava` int(11) NOT NULL,
  `id_car_ava` int(11) NOT NULL,
  `id_usu_ava` int(11) NOT NULL,
  `dirigibilidade_ava` int(11) NOT NULL,
  `estabilidade_ava` int(11) NOT NULL,
  `potencia_ava` int(11) NOT NULL,
  `consumo_ava` int(11) NOT NULL,
  `geral_ava` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

--
-- Extraindo dados da tabela `avaliacao`
--

INSERT INTO `avaliacao` (`id_ava`, `id_car_ava`, `id_usu_ava`, `dirigibilidade_ava`, `estabilidade_ava`, `potencia_ava`, `consumo_ava`, `geral_ava`) VALUES
(1, 1, 2, 4, 2, 2, 4, 4),
(2, 1, 6, 4, 4, 5, 5, 5),
(3, 2, 7, 5, 5, 5, 4, 3),
(4, 3, 9, 4, 4, 4, 4, 3);

-- --------------------------------------------------------

--
-- Estrutura da tabela `carros`
--

CREATE TABLE IF NOT EXISTS `carros` (
  `id_car` int(11) NOT NULL,
  `model_car` varchar(200) NOT NULL,
  `ano_car` int(12) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

--
-- Extraindo dados da tabela `carros`
--

INSERT INTO `carros` (`id_car`, `model_car`, `ano_car`) VALUES
(1, 'Golf', 2000),
(2, 'Pálo', 1998),
(3, 'Jeta', 2015),
(4, 'Peugeout 206', 2006);

--
-- Indexes for dumped tables
--

--
-- Indexes for table `avaliacao`
--
ALTER TABLE `avaliacao`
  ADD PRIMARY KEY (`id_ava`);

--
-- Indexes for table `carros`
--
ALTER TABLE `carros`
  ADD PRIMARY KEY (`id_car`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `avaliacao`
--
ALTER TABLE `avaliacao`
  MODIFY `id_ava` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=5;
--
-- AUTO_INCREMENT for table `carros`
--
ALTER TABLE `carros`
  MODIFY `id_car` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=5;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua dúvida não ficou clara. O que quer dizer com "alias duplo"?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua dúvida não ficou clara. O que quer dizer com "alias duplo"?

Eu vou editar a pergunta, estava tentando colocar o codigo funcionando no sqlfiddle mais não deu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize JOINs no lugar de sub-select.

 

Se for utilizar somente através de SQL, você precisará realizar duas queries, uma para retornar todos os resultados e outra para exibir as avaliações.

 

Já no PHP, você pode usar a função PDO::rowCount() ou MySQLi::num_rows.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade, eu preferiria que ficase em uma SQL , acho que os JOIN's não resolveriam

Mais de qualquer forma, consegui resolver, alias com umas dicas eu consegui solucionar, hehe, no final agente sempre pensa, porque não tentei isso antes!! :wacko:

A solução era simples, eu so não estava conseguindo executar

SELECT *, (SELECT COUNT(*) FROM avaliacao WHERE id_car_ava=id_car ) AS nome,
		(SELECT SUM(geral_ava) FROM avaliacao WHERE id_car_ava = id_car ) AS QT
	FROM carros

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que não resolveriam?

 

Veja só:

 

Todas as avaliações de um carro.

'SELECT
    *
FROM
    carro
    INNER JOIN avaliacao ON (carro.id = avaliacao.carro_id)
WHERE
    carro.id = 1;'    

Quantidade de registros para um carro (nem precisa de JOIN):

'SELECT
    count(*)
FROM
    carro
    INNER JOIN avaliacao ON (carro.id = avaliacao.carro_id)
WHERE
    carro.id = 1;'

Se você quiser a quantidade de avaliações por carros:

'SELECT
    carro.id,
    count(avaliacao.id),
    sum(avaliacao.nota)
FROM
    carro
    INNER JOIN avaliacao ON (carro.id = avaliacao.carro_id)
GROUP BY
    carro.id;'

Lembrando apenas que não utilizei a estrutura apresentada, apenas criei exemplos hipotéticos.

 

Normalmente sub-selects criam um overhead de informação, pois cada select é uma nova consulta. Mas depende muito do SGBD e estrutura criada (além de indexes, etc..).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lembrando apenas que não utilizei a estrutura apresentada, apenas criei exemplos hipotéticos.

 

Normalmente sub-selects criam um overhead de informação, pois cada select é uma nova consulta. Mas depende muito do SGBD e estrutura criada (além de indexes, etc..).

Desculpe se me expressei mal Gabriel, se disse não resolveria, entenda-se quando me expressei nao seria necessário.

 

talves também pq nao expliquei a real situação, por ser um simples trabalho apenas para apresentação, não precisaria de muita coisa.

 

Te agradeço pelas soluções que voce passou. e mais uma vez, Mil desculpas se me expressei mal!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a ajuda dos amigos, mas preciso entender uma processo que não estou conseguindo sucesso.

      Como mencionado no Título estou escrevendo um Sistema Web para Gerenciamento de Empresa.
       
      Minha dúvida, que preciso muito entender:
      - preciso agora escrever a Rotina para Emissão de NFe e essa parte não estou conseguindo.
       
      tenho assistido alguns vídeos e leituras, mas não estou conseguindo sucesso, já fiz toda as importações das LIB da NFePhp conforme orientação.

      Preciso de ajuda.

      Algum dos amigos tem conhecimento de algum passo-a-passo explicando a criação dessa rotina ?

      tenho visto alguns vídeos com LARAVEL, mas quando tento utilizar e converter para PHP+Codeiginter, dá uma fila de erros que não entendo, mesmo informando as lib necessárias.

      Alguns do amigo tem algum vídeo, leitura explicando essa parte ?

      Grato,

      Cesar.
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer ao auxílio dos amigos, mas preciso entender e resolver um problema.
       
      Tenho uma Rotina que o usuário seleciona os produtos que deseja para requerer ao setor responsável.
       
      O usuário escolhe um produto qualquer e Clicla em um button para incluir a lista.

      O problema que estou enfrentando é que após escolher o produto e teclar ENTER o Sistema já salva no BD.
       
      Gostaria de criar uma Tecla de Atalho, para quando incluir/escolher o produto na lista, o usuário tecla como exemplo:
      ALT+A  para agregar a lista
      ALT+S para salvar a lista de itens desejados.

      Assim, quando teclar enter, o sistema não dispara o GRAVAR na Base de Dados.

      Grato,

      Cesar
       
       
       
    • Por violin101
      Caros amigos, saudações.

      Por favor, peço desculpa em recorrer a ajuda dos amigos referente uma dúvida.

      Tenho um Sistema que estou escrevendo em PHP + Codeigniter e a minha dúvida em Codeigniter é:
      Obs.: as tabela são em MySql

      => como faço para IMPORTAR o dado de uma Tabela para outra, as tabela são:
      ___________________Tabela de Pedido     =========== para ==========>    Tabela de Entrada de Lançamentos
      itens: codigoProduto | quantidade | valorUnitario  === importar===> itens: codigoProduto | quantidade | valorUnitario
       
      Estou tentando de várias formas, mas não estou conseguindo.

      Por favor, alguém pode me dar uma ajuda, explicação ou orientação.

      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos, saudações.
       
      Estou com uma pequena dúvida que não estou conseguindo resolver.

      Tenho 2 Tabelas, a 1ª.principal e a 2ª.secundária.

      Exemplo:
      Dados da 1ª Tabela - Peças e Equipamentos
      Dados da 2ª Tabela - Veículos.

      Seria isso:
      0010 - Pneu Aro 20
        [x] 001 - Corsa
        [_] 002 - Fusca
        [_] 003 - Palio
      Comentário:________________
       
      0100 - Óleo para Motor
         [x] 002 - Fusca
         [_] 003 - Palio
      Comentário:________________
       
      1030 - Lubrificante
         [_] 001 - Corsa
         [x] 003 - Palio
      Comentário:________________
       
      O meu problema está sendo quando preciso SALVAR/ATERAR o campo COMENTÁRIO, pois trata-se da 1ª.tabela.
       
      Gostaria salvar o COMENTÁRIO sem interferir nas seleção da 2ª. tabela.
       
      Grato,
       
      Cesar
       
       
       
       
       
    • Por Carcleo
      Estou começando no Laravel 11 e me deparei com um problema de belongsTo
       
      public function listOfClass(Request $request, StudentDisciplineClassroom $sdc) : ?string {         $all = $sdc::select('student')->with('studentRelation')->where('classroom',$request->classroom)->distinct('student')->get();     dd($all->toArray());     $students = [];     foreach ($all as $student) {             $students[] =$student;     }       return response()->json($students)->getContent();     } isso

      Em studentRelation temos na tabela StudentDisciplineClassroom com os campos

      id(chave primaria)
      ra (chave estrangera que referencia o campo academic_registration na tabela de students)

      e a tabela student tem os campos

      id (chave primária)
      academic_registration (que vai ser refeenciada na tabela StudentDisciplineClassroom

      Mas na hora de fazer
      $sdc::select('student')->with('studentRelation')->where('classroom',$request->classroom)->distinct('student')->get();
      O studentRelation retorna nulo

      Onde eu posso estar errando?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.