Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Ignorar linha em select


Arasius

Question

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 !!!

Edited by Denis Courcy
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 !

Edited by Arasius
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.


  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...