問題は、クエリが期待どおりの結果を返さないことです(クエリをスタンドアロンで実行して、結果セットが期待どおりかどうかを確認することは常に役立ちます)。
そうです、これを分解しましょう。
カウントしないすべての投稿をカウントしようとしています そのuserIDについて、タクシーテーブルに一致するレコードがあります。ここで必要なのは、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