Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.>
3 horas atrás, Motta disse:
Detalhe melhor o problema com o exemplo real (tabela , colunas etc).
Em todo caso pesquise por IN
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.
--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
>
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?Pesar é não ter a informação , mas em tese não pois id_assunto seria chave.
>
14 horas atrás, Motta disse:
Pesar é não ter a informação , mas em tese não pois id_assunto seria chave.
Então melhor ainda, hehe
Muito obrigado! Pode marcar como resolvido heh
Detalhe melhor o problema com o exemplo real (tabela , colunas etc).
Em todo caso pesquise por IN
UNION