Ir para conteúdo

POWERED BY:

Arquivado

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

Good

Selecionar apenas se não tiver registro cadastrado

Recommended Posts

Tenho 2 tabelas:

 

acontecimentos { id, titulo, status (1,0), ip }

acontecimentos_aprovacao { id, acontecimento_id, voto (0,1), ip }

 

- A tabela acontecimentos é tipo uma notícia, e na tabela acontecimentos_aprovacao é como se fosse comentários;

- Só é permitido ser comentado uma vez. Isso ta OK;

- O sistema vai retornar um acontecimento aleatório, desde que o usuário não tenha comentado; Caso não tenha mais nenhum acontecimento disponível, simplesmente não aparecerá nada pra ele.

 

A query que tentei fazer, mas deu erro:

SELECT acon.*, (SELECT COUNT(*) FROM acontecimentos_aprovacao WHERE aid = acon.aid AND ip = '' LIMIT 1) AS jaExiste FROM acontecimentos acon WHERE acon.ip != '' AND acon.id != '21' AND acon.status = '0' AND jaExiste = '0' ORDER BY RAND() LIMIT 1

Como posso selecionar somente se o usuário não tiver comentado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este campo `jaExiste` é um ALIAS, e não pode ser utilizado na cláusula WHERE.

 

Remove a o critério jaExiste = '0' do WHERE e coloque dentro de um HAVING depois do GROUP BY e antes do ORDER BY:

SELECT
  acon.*,
  (SELECT COUNT(*) FROM acontecimentos_aprovacao WHERE aid = acon.aid AND ip = '' LIMIT 1) AS jaExiste
FROM acontecimentos acon
WHERE
  acon.ip != ''
  AND acon.id != '21'
  AND acon.status = '0'
GROUP BY acon.id
HAVING jaExiste = '0' # ele trabalha em cima do GROUP BY (após)
ORDER BY RAND()
LIMIT 1

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.