Jump to content
eiwes

[Resolvido] Sistema de busca com vários wheres e limit em um só

Recommended Posts

Olá a todos, amigos

 

Estou bolando um sistema na qual o usuário pode "escolher" vários parâmetros, e por fim filtra-los.

 

O que eu pensei (e o jeito mais fácil) foi assim:

 


//exemplo apenas

$a1 = SELECT * FROM TABELA1 WHERE COLUNA1 = 1 LIMIT 10;
$a2 = SELECT * FROM TABELA 1 WHERE COLUNA1 = 2 LIMIT 10;
$a3 = SELECT * FROM TABELA 1 WHERE COLUNA 1 = 3 LIMIT 10;
	foreach()...

return $a1, $a2, $a3...

 

E por aí vai... Suponhamos que o mizeravi faça 30 filtros desse, meu servidor daria um delay MONSTRUOSO e ferraria tudo! (resumindo, cairia).

 

 

Alguém me dá uma luz no fim do túnel? Uso PDO e OOP.

Preciso muito de uma abertura na mente pra saber a possibilidade disso ser melhor ou até mesmo feito no próprio SQL.

 

 

Share this post


Link to post
Share on other sites

Detalhe melhor o problema com o exemplo real (tabela , colunas etc).

 

Em todo caso pesquise por IN

UNION

 

Share this post


Link to post
Share on other sites
3 horas atrás, Motta disse:

Detalhe melhor o problema com o exemplo real (tabela , colunas etc).

 

Em todo caso pesquise por IN

UNION

 

 

Opa, vamos lá Motta :)

 

Acredito que o IN no WHERE é justamente pra isso. (Não conhecia isso)

 

Seria basicamente assim: tenho vários assuntos separados por numeração.

 

Exemplo:

 

TabelaTeste

 

Assunto A | ID = 1

 

Assunto B | ID = 2

 

Assunto C | ID = 3

 

Assunto D | ID = 4

 

 

Existem 20 registros do assunto A; 15 do B; 30 do C e 100 do D (Por exemplo)

 

com  isso, o SQL ficaria assim:

 

SELECT * FROM TabelaTeste WHERE ID_ASSUNTO IN (1, 3, 4)

	//Ou seja, o usuário não solicitou registros do "B". No entanto, trará todos os registros.

 

Haveria a possibilidade de, além de selecionar somente os respectivos assunto, ainda limitar a quantidade de registros por cada assunto?

 

Tipo assim:

SELECT * FROM TabelaTeste WHERE ID_ASSUNTO IN (1, 3, 4) LIMIT 10, 5, 15

// Assim, traria 10 registros do Assunto A, 5 registros do Assunto C e 15 do D.

 

Share this post


Link to post
Share on other sites

 


 

--tente usto

SELECT * FROM TabelaTeste WHERE ID_ASSUNTO = 1 LIMIT 10
UNION
SELECT * FROM TabelaTeste WHERE ID_ASSUNTO = 3 LIMIT 5
UNION
SELECT * FROM TabelaTeste WHERE ID_ASSUNTO = 4 LIMIT

 

Share this post


Link to post
Share on other sites
5 minutos atrás, Motta disse:

 


 


--tente usto

SELECT * FROM TabelaTeste WHERE ID_ASSUNTO = 1 LIMIT 10
UNION
SELECT * FROM TabelaTeste WHERE ID_ASSUNTO = 3 LIMIT 5
UNION
SELECT * FROM TabelaTeste WHERE ID_ASSUNTO = 4 LIMIT

 

PERFEITO!!! Deu certinho. MUITO OBRIGADO, Motta :)

 

Mas uma pergunta, só pra ficar ciente: isso pesa muito o servidor?

Share this post


Link to post
Share on other sites

Pesar é não ter a informação , mas em tese não pois id_assunto seria chave.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Dinho Nunes LC
      <div align="center" id="subtitulo"> Canais Abertos </div> <div class="ui cards"> <div class="card"> <div class="content"> <a href="globo.html" style="display: block; color: black"> <div align="center"> <div> <img class="ui tiny image" id="imagem_card_casa" src="assets/images/Rede_Globo_2014.png"> <div align="center" id = "nome_time_fora"> <b>Globo RJ</b> </div> </div> Onde "globo.html" seria substituído pelo link que esta em uma tabela do banco de dados.
       
      Já fiz a conexão. E tenho a base de dados pronta.
       
      Motivo pelo qual estou buscando ajuda:
       
      Faço manualmente a mudança de cada link (são mais de 300) diariamente para evitar copias de terceiros. Sendo assim poderia usar um CRUD para facilitar a troca dos links direto no banco de dados.
    • By wesleycsilva
      Tem uma tabela que relaciona os produtos de uma determinada compra, onde preciso consultar diversos produtos e retornar os ids das compras que tenham todos os produtos que consultei, em uma estrutura parecida com o exemplo abaixo:
       
      SELECT  * FROM  produtos_has_compras WHERE (idProduto = 6 AND idProduto = 77 AND idProduto = 11) GROUP BY idCompra;
       
      Alguém teria uma solução que possa me ajudar?
    • By jeanzinsousa
      Salve, Galera estou com uma dúvida estudando banco de dados e programação.
       
      escrevi a seguinte query:
       
      SELECT data_pg as diaria, SUM(valor_pg) as valor_diario, SUM(valor_despesa) as valor_despesa, (SELECT SUM(valor_pg) as dinheiro FROM pagamento WHERE tipo = 5 AND MONTH(data_pg) = 06 AND YEAR(data_pg) = 2019) as total_dinheiro, (SELECTSUM(valor_pg) as debito FROM pagamento WHERE tipo = 25 AND MONTH(data_pg) = 06 AND YEAR(data_pg) = 2019) as total_debito, (SELECT SUM(valor_pg) as credito FROM pagamento WHERE tipo = 15 AND MONTH(data_pg) = 06 AND YEAR(data_pg) = 2019) astotal_credito FROM pagamento WHERE MONTH(data_pg) = 06 AND YEAR(data_pg) = 2019 GROUP BY diaria ORDER BY `diaria`
       
      resultado:
      diaria  1 valor_diario valor_despesa total_dinheiro total_debito total_credito   2019-06-10 818.70 0 288.40 586.95 113.30 2019-06-11 169.95 0 288.40 586.95 113.30
       
       
       
       
      Como podem ver meu objetivo e separar por dia o resultado dos valores divididos por tipo de pagamento.
      porém o mesmo mostra a soma total nas subquery.
      quando coloco o group by order by dentro das subquerys apresenta a seguinte mensagem de erro: #1242 - Subquery returns more than 1 row 
       
       
      como resolver?
    • By JorgeeHenrique
      Bom dia, sou iniciante em Delphi, estou fazendo um Cadastro de Clientes, gostaria de usar três Edit´s para filtrar alguns  dados porem com o código abaixo consegui fazer apenas com 1 edit.text, como faço pra usar três e que se algum estiver em branco ele retorna o valor apenas do Edit.text que foi preenchido?
       
      Exemplo: 
       
      Quero buscar por Nome, Situação e Rota (Cliente a da rota B com situação C) e se algum desses campos estiver vazio ele busca apenas o que foi preenchido. Obrigado pela atenção!
       
      .
      procedure TFrm_Cadastro.Bt_BuscarClick(Sender: TObject); begin with Frm_Cadastro.Tbl_Clientes do begin Close; SQL.Clear; SQL.Add( 'Select * from Tbl_Cad_Clientes'); SQL.Add('where Cli_Nome like :nome'); ParamByName('nome').Value := '%' + txt_buscar_nome.Text + '%'; Open; end; end;  
    • By lemanoel
      Oi, alguem pode me ajudar?
       
      Tenho uma tabela de status por dia, e efetivo um registro só quando ha alterações.. exemplo:
      Dia 01, bom
      Dia 03, médio
      Dia 10, ruim
       
      Como encontrar o status do dia 07, via sql?
      Olhando pro exemplo sei que seria MÉDIO… mas nao tenho a menor ideia de como escrever o código....
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.