Проблемът ви е, че заявката ви не връща това, което смятате, че връща (винаги помага да стартирате заявката си самостоятелно, за да видите дали наборът от резултати е това, което очаквате).
Добре, нека разбием това.
Опитвате се да преброите всички публикации, които не има съвпадащ запис в таблицата на таксита за този потребителски идентификатор. Това, което искате тук, е да JOIN
таблиците и вземете тези редове в post
което обикновено би било изключено от присъединяването. Това се постига чрез ляво външно присъединяване
(редактирано )
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
Това HAVING
клаузата казва:само онези редове в набора от резултати, които нямат съответен t.taxiID.
Ако изпълните тази заявка и получите очаквания набор от редове (публикации, които нямат харесвания или нехаресвания от този потребител), ТОГАВА можете да добавите външна заявка, за да преброите броя на върнатите редове:
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
Това трябва да върне един скалар с име count. В този случай ще можете да кажете:
if ($count[0]->count > 10) { blah blah blah }
(2-ра редакция ) Тази вътрешна заявка ще ви предостави онези публикации, които имат или стойност =1 в таблицата за таксита, или изобщо нямат стойност, което води до връщане 4 за вашия пример:
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