Ir para conteúdo

POWERED BY:

Arquivado

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

New Job

[Resolvido] Usando no SQL: NOT IN ( )

Recommended Posts

Bom dia pessoal.

 

Tenho a seguinte situação:

Uma página que vai exibir resultados de duas consultas ao banco.

 

Primeira consulta:

$sql = "SELECT cod_evento FROM eventos LIMIT 4";
$result_sql = sql_exec($sql);
while ( $row = mysql_fetch_assoc($result_sql) ) {

///Aqui monto a exibição


}

 

Na segunda consulta, gostaria de excluir o que já foi mostrado na primeira consulta

 

$sql_dois = "SELECT cod_evento FROM eventos WHERE cod_evento NOT IN ("RESULTADOS DA PRIMEIRA CONSULTA") LIMIT 12";

 

Alguém tem alguma idéia de como posso montar isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade você não precisa usar not in.

 

Se a ordenação nas duas consultas for sempre a mesma você pode começar a segunda consulta diretamente da onde a primeira parou especificando no limit, a segunda consulta fica assim:

 

$sql_dois = "SELECT cod_evento FROM eventos WHERE cod_evento LIMIT 4, 12";

 

Nessa SQL ele vai começar pegar a partir do 4 elemento os próximos 12.

 

Ou usando o not in você pode fazer uma variável receber os IDs e concatenar na segunda SQL, assim:

 

$ids = "";
$sql = "SELECT cod_evento FROM eventos LIMIT 4";
$result_sql = sql_exec($sql);
while ( $row = mysql_fetch_assoc($result_sql) ) {
$ids .= $row['cod_evento'] . ',';
}

 

E na segunda SQL:

if(strlen($ids))
$ids = substr($ids, 0, strlen($ids) - 1); // remove a ultima virgula
$sql_dois = "SELECT cod_evento FROM eventos WHERE cod_evento NOT IN ($ids) LIMIT 12";

 

Até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma pergunta, os dados são sequenciais ou aleatórios..?

 

Se for sequenciais, vai usando o LIMIT, crie duas variáveis..

 

$inicio, $fim..

 

E com um simples jogo de adição e subtração, você resolve seu problema.

 

Abraço, traga seu retorno.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade você não precisa usar not in.

 

Se a ordenação nas duas consultas for sempre a mesma você pode começar a segunda consulta diretamente da onde a primeira parou especificando no limit, a segunda consulta fica assim:

 

$sql_dois = "SELECT cod_evento FROM eventos WHERE cod_evento LIMIT 4, 12";

 

Nessa SQL ele vai começar pegar a partir do 4 elemento os próximos 12.

 

Ou usando o not in você pode fazer uma variável receber os IDs e concatenar na segunda SQL, assim:

 

$ids = "";
$sql = "SELECT cod_evento FROM eventos LIMIT 4";
$result_sql = sql_exec($sql);
while ( $row = mysql_fetch_assoc($result_sql) ) {
$ids .= $row['cod_evento'] . ',';
}

 

E na segunda SQL:

if(strlen($ids))
$ids = substr($ids, 0, strlen($ids) - 1); // remove a ultima virgula
$sql_dois = "SELECT cod_evento FROM eventos WHERE cod_evento NOT IN ($ids) LIMIT 12";

 

Até mais.

 

 

PERFEITO!!!

 

fiz com o NOT IN, pois a consulta era um pouco mais complexa do que coloquei ali, e funcionou perfeitamente!

Muito obrigado!

 

Uma pergunta, os dados são sequenciais ou aleatórios..?

 

Se for sequenciais, vai usando o LIMIT, crie duas variáveis..

 

$inicio, $fim..

 

E com um simples jogo de adição e subtração, você resolve seu problema.

 

Abraço, traga seu retorno.

 

Obrigado pela dica "leomarriel", porém como a consulta era um pouco mais complexa, fiz com a dica do "jhrhp" usando o NOT IN.

Valeu mesmo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Show.. abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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