sql >> Base de Datos >  >> RDS >> Mysql

MySQL cuenta resultados de consultas complejas?

Su problema es que su consulta no devuelve lo que cree que devuelve (siempre ayuda ejecutar su consulta de forma independiente, para ver si el conjunto de resultados es lo que espera).

Bien, analicemos esto.

Estás intentando contar todas las publicaciones que no tener un registro coincidente en la tabla de taxis, para ese ID de usuario. Lo que quieres aquí es JOIN las tablas y obtenga esas filas en post que normalmente sería excluido por la unión. Esto se logra mediante una combinación externa izquierda

(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 dice:solo aquellas filas en el conjunto de resultados que no tenían un t.taxiID correspondiente.

Si ejecuta esta consulta y obtiene el conjunto esperado de filas (publicaciones que no tienen gustos o disgustos por parte de ese usuario), ENTONCES puede agregar una consulta externa para contar el número de filas devueltas:

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

Esto debería devolver un único conteo escalar con nombre. En este caso podrás decir:

if ($count[0]->count > 10) { blah blah blah }

(Segunda edición ) Esta consulta interna le dará aquellas publicaciones que tienen valor =1 en la tabla de taxis, o ningún valor en absoluto, lo que da como resultado que se devuelvan 4 para su ejemplo:

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