Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Ignorar linha em select


Arasius

Pergunta

PEssoal, boa tarde !

Estou com o seguinte problema:

Tenho 3 tabelas:

NOTICIAS:

noticia_id

noticia_nome

CATEGORIAS:

categoria_id

categoria_nome

LINK:

noticia_id

categoria_id

1 notícia pode estar em várias categorias, ok até ai tudo bem porque a minha tabela LINK resolve esse gerenciamento.

O meu problema é o seguinte:

Quero fazer um consulta ao BD para trazer uma notícia, excluindo as que estejam em determinada categoria...

Digamos que

Tabela Notícias

+-------------+--------------------+

| noticia_id | noticia_nome |

+-------------+--------------------+

| 1 | Feliz Natal |

| 2 | Feliz Ano Novo |

+-------------+--------------------+

Tabela Categorias

+---------------+--------------------+

| categoria_id | categoria_nome |

+---------------+--------------------+

| 1 | Anuncios |

| 2 | Festas |

+---------------+--------------------+

Tabela Link

+------------+----------------+

| noticia_id | categoria_id |

+------------+----------------+

| 1 | 1 |

| 1 | 2 |

| 2 | 2 |

+------------+----------------+

Então, como eu faria a consulta, para exibir os resultados encontrados com a CATEGORIA 2, mas excluindo aqueles que estejam também na categoria 1...

Espero ter sido +- claro...rssss

O exemplo acima foi para ilustrar....abaixo segue a consulta real que estou fazendo e não dá resultado.

"SELECT p.nodeid, p.contentid, c.categoryid, c.nodeid, a.previewimage, a.contentid, e.title FROM `node` AS p INNER JOIN `nodecategory` AS c ON p.`nodeid` = c.`nodeid` INNER JOIN `article` AS a ON p.`contentid` = a.`contentid` INNER JOIN `category` AS d ON c.`categoryid` = d.`categoryid` INNER JOIN `nodeinfo` AS e ON p.`nodeid` = e.`nodeid` WHERE  (c.`categoryid` = 90 OR c.`categoryid` = 86 OR c.`categoryid` = 141 OR c.`categoryid` = 89 OR c.`categoryid` = 87  OR c.`categoryid` = 88  OR c.`categoryid` = 91) AND (c.`categoryid` <> 186) ORDER BY p.`publishdate` DESC LIMIT 2"

O select está ok, ele integra blzinha as 5 tabelas....só não consigo fazer ele não trazer as linhas que estão também na categoria 186 =/

ABraço e Feliz Ano novo !!!

Editado por Denis Courcy
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

'Arasius'

Esta comparação

AND (c.`categoryid` <> 186)
está conflitando com as outras. Está obrigando a trazer todas as categorias exceto a categoria 186. Se seu objetivo é trazer as categorias que estavam nesta parte da cláusula where
(c.`categoryid` = 90 OR c.`categoryid` = 86 OR c.`categoryid` = 141 OR c.`categoryid` = 89 OR c.`categoryid` = 87  OR c.`categoryid` = 88  OR c.`categoryid` = 91)
e mais a categoria 158, use o script abaixo:
"SELECT p.nodeid, p.contentid, c.categoryid, c.nodeid, a.previewimage, a.contentid, e.title 
FROM `node` AS p 
INNER JOIN `nodecategory` AS c ON p.`nodeid` = c.`nodeid` 
INNER JOIN `article` AS a ON p.`contentid` = a.`contentid` 
INNER JOIN `category` AS d ON c.`categoryid` = d.`categoryid` 
INNER JOIN `nodeinfo` AS e ON p.`nodeid` = e.`nodeid` 
WHERE  (c.`categoryid` IN (90,86,141,89,87,88,91,158))
ORDER BY p.`publishdate` DESC "
A cláusula LIMIT em
LIMIT 2

de sua consulta original pode estar mascarando o resultado

Link para o comentário
Compartilhar em outros sites

  • 0

Oi Denis !!

Vlw pela resposta, mas não era bem isso não... na verdade, eu quero que ele traga as noticias de todas as categoriais que enumerei EXCETO as que também estiverem na categoria 186 (esquece 158, digitei errado, 158 não existe) (lembrando que as noticias podem estar em varias categorias ao mesmo tempo)

Btw, você já me resolveu um problem, que foi me mostrar como enumerar as categorias sem ter que repetir N vez, apenas utilizando o IN ().. VVLw :D

Abração !

Editado por Arasius
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...