Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL conta resultados de consultas complexas?


Seu problema é que sua consulta não está retornando o que você acha que ela retorna (sempre ajuda a executar sua consulta de forma independente, para ver se o conjunto de resultados é o que você espera).

Certo, vamos quebrar isso.

Você está tentando contar todas as postagens que não tem um registro correspondente na tabela de táxis, para esse userID. O que você quer aqui é JOIN as tabelas e obter essas linhas em post que normalmente seriam excluídos pela junção. Isto é conseguido por uma junção externa esquerda

(editado )
SELECT p.ID, t.taxiID
FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
HAVING t.taxiID IS NULL

Que HAVING cláusula está dizendo:apenas as linhas no conjunto de resultados que não têm um t.taxiID correspondente.

Se você executar esta consulta e obter o conjunto esperado de linhas (postagens que não têm gostos ou não gostos por esse usuário), ENTÃO você pode adicionar uma consulta externa para contar o número de linhas retornadas:
SELECT COUNT(*) as count FROM (
    SELECT p.ID, t.taxiID
    FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
    HAVING t.taxiID IS NULL
) a

Isso deve retornar uma única contagem escalar nomeada. Neste caso, você poderá dizer:
if ($count[0]->count > 10) { blah blah blah }

(2ª edição ) Essa consulta interna fornecerá as postagens que têm valor =1 na tabela de táxis ou nenhum valor, o que resulta no retorno de 4 para o seu exemplo:
SELECT p.ID, t.taxiID, t.value
FROM post p LEFT OUTER JOIN taxi t ON p.ID = t.taxiID AND t.userID = '.$user.'
HAVING t.taxiID IS NULL OR t.value = 1