id 1 -4373
ACESSE SUA CONTA   |   facebook

Cadastre-se   //   Vantagens   //   Esqueci minha senha

Queries Principais







1. Consulta da Fila do Pregão (catalogo.php)

 
SELECT lp.id as id_pregao, lp.idMoeda, lp.preco as lance_inicial, lp.fimPregao, lp.status, am.imgAnunFrente, am.imgAnunVerso, (SELECT COUNT(*) FROM lances l WHERE l.idMoeda = lp.idMoeda AND l.idAnuncio = lp.idAnuncio) as total_lances, (SELECT MAX(l2.valor_lance) FROM lances l2 WHERE l2.idMoeda = lp.idMoeda AND l2.idAnuncio = lp.idAnuncio) as maior_lance_atual FROM lista_pregao lp JOIN anuncios_moedas am ON am.idAnuncio = lp.idAnuncio WHERE lp.status = 'aberto' ORDER BY CASE WHEN lp.fimPregao IS NOT NULL THEN 0 ELSE 1 END, lp.id ASC;

Função:

  • Retorna a lista de moedas/cédulas em fila de pregão aberta.

  • Inclui imagens, lance inicial, status e estatísticas de lances.

Observações Técnicas:

  • Subqueries para COUNT e MAX podem ser substituídas por LEFT JOIN em tabelas agregadas para melhorar performance em grandes filas.

  • Ordenação coloca primeiro as peças em leilão ativo (fimPregao IS NOT NULL) e depois as aguardando.


2. Inserção de Lance (lance_antecipado.php)

 
INSERT INTO lances (idMoeda, idAnuncio, idUsuario, valor_lance, data_hora) VALUES (:idMoeda, :idAnuncio, :idUsuario, :valor_lance, NOW())

Função:

  • Registra um novo lance no pregão.

Regras importantes implementadas no PHP:

  • Aceita apenas lances maiores que o último.

  • Em caso de lance igual, apenas o primeiro é aceito (não há empate).

Sugestões:

  • Adicionar triggers ou constraints para reforçar a regra de lances maiores diretamente no banco.

  • Indexar (idMoeda, idAnuncio, valor_lance) para acelerar consultas de MAX(valor_lance).


3. Consulta de Lances da Peça

 
SELECT * FROM lances WHERE idMoeda = :idMoeda AND idAnuncio = :idAnuncio ORDER BY valor_lance DESC, data_hora ASC LIMIT 1;

Função:

  • Recupera o maior lance atual para exibição.

  • data_hora ASC garante que, em caso de empate de valores, o primeiro lance vence.

Observações:

  • Essencial para validar regras de empate do pregão.

  • Pode ser otimizada com índice em (idMoeda, idAnuncio, valor_lance, data_hora).


4. Consulta para Catálogo de Moedas / Cédulas

 
SELECT * FROM anuncios_moedas WHERE idAnuncio IN (SELECT idAnuncio FROM lista_pregao WHERE status='aberto')

Função:

  • Retorna informações detalhadas das peças que estão na fila de pregão, usadas no catálogo e ficha técnica.

Sugestões:

  • Usar JOIN ao invés de IN para performance em grandes volumes.

  • Padronizar campos exibidos (nome, pais, ano, descricao) para facilitar front-end.


5. Contagem de Peças na Fila

 
SELECT COUNT(*) AS total_fila FROM lista_pregao WHERE status = 'aberto';

Função:

  • Fornece quantidade total de peças na fila para exibição no cabeçalho do catálogo.

Sugestão:

  • Criar query preparada com cache periódico, evitando contagem repetida em cada refresh da página.


6. Atualização de Status de Pregão

 
UPDATE lista_pregao SET status = :novo_status, fimPregao = NOW() WHERE id = :id_pregao;

Função:

  • Marca pregão como encerrado e define hora de finalização.

Observações:

  • Essencial para sincronização com front-end (ex.: destaque da próxima moeda).

  • Recomenda-se criar função PHP centralizada para atualização, evitando inconsistências.


7. Recomendações Gerais para Queries

  1. Use Prepared Statements em todas as queries com parâmetros externos.

  2. Indices adequados: (idMoeda, idAnuncio, valor_lance, data_hora) para performance.

  3. Evitar subqueries em SELECT quando possível; substituir por JOIN + GROUP BY.

  4. Auditoria: registrar logs de lances e alterações de status para rastreabilidade.

  5. Paginação: sempre que listar grandes volumes, usar LIMIT OFFSET para reduzir carga.



Fonte:

Autor do blog: Nilton Romani

id 2 -4373
Voltar
Compartilhar
Facebook Twitter YouTube Feed de notícias
Coleções de Cédulas e Moedas Brasileiras © 2014. Todos os direitos reservados.