これが私の問題です。2番目のテーブルに対応するエントリがない場合でも、2つのdbテーブルからクエリ結果を取得します。
SQLで使用するサンプルコードを次に示します
SELECT DISTINCT apps.id, apps.*, req.status
FROM applications AS apps, requests AS req
WHERE apps.id = {$app_id}
ただし、問題は、request.status 値/エントリを持たないアプリをプルアップしないことです。そのため、質問は次のとおりです。この単純なクエリを変更して、すべてのアプリケーションの結果をプルアップすることは可能でしょうか。* 行がある場合でも対応する requests.status 行/エントリはありませんか?
以下を編集:
だからここに私が得たフィードバックからの私の新しいクエリがあります(これはうまくいきます)
SELECT DISTINCT
apps.*, req.status
FROM
applications AS apps
LEFT JOIN requests AS req ON (req.app_id = apps.id AND req.uid = {$user_id})
WHERE
apps.id = {$app_id}
BUT:要求ステータスをフィルタリングするために where 句に新しい式を追加すると、暗黙的なクエリと同じ問題が発生し、結果が得られません (クエリは次のとおりです)。
SELECT DISTINCT
apps.*, req.status
FROM
applications AS apps
LEFT JOIN requests AS req ON (req.app_id = apps.id AND req.uid = {$user_id})
WHERE
apps.id = {$app_id}
AND
(req.status = 2 OR req.status = 5)
別の編集
更新されたコードを次に示します。問題は、サブクエリを追加すると、サブクエリがすべての行をプルアップし、ステータス列の値として NULL を持つことですが、WHERE status != 2 を追加するとすぐにすべてのエントリが削除されることです。これはまだすべての行がnullであるべきではありませんか? null は明らかに != 2 であるためです。
SELECT DISTINCT
apps . *
FROM
(SELECT
apps . *, req.status
FROM
appstore_app AS apps
LEFT JOIN app_user_request AS req ON (req.uid = 187 AND req.appid = apps.appid)
WHERE
apps.appid > 0 AND apps.company_id = 122) AS apps
WHERE
apps.status != 2
ORDER BY apps.average_user_rating DESC
最終編集
助けてくれてありがとう!
これが私のために働いた私の最後のクエリです:
SELECT
apps.*, req.status
FROM
appstore_app AS apps
LEFT JOIN
app_user_request AS req ON (req.uid = {$user_id} AND req.appid = apps.appid AND (req.status IS NULL OR req.status != 2))
WHERE
apps.appid > 0 AND apps.company_id = {$company_id}