1

HEREに同様の質問をしましたが、これはそれを拡張します。

元のクエリは次のとおりです。

SELECT  p.pid
    , p.title
    , p.description
    , p.price
    , p.datecreated AS pdate
    , p.image1
    , c.cid
    , c.comment
    , c.datecreated AS cdate
    , pa.fname AS PFName
    , pa.lname AS PLName
    , ca.fname AS CFName
    , ca.lname AS CLName
FROM tblPosts p
LEFT JOIN tblUsers pa ON pa.uid = p.uid
LEFT JOIN tblComments c ON p.pid = c.pid
LEFT JOIN tblUsers ca ON ca.uid = c.uid
ORDER BY p.pid

2 つの異なる値のいずれかである各投稿 (statusType) のステータスを保持する 4 番目のテーブル (tblPostStatus) を追加する必要があります。JOIN を追加しようとすると、tblPostStatus の各行に 1 つずつ重複した行が表示されるようです (このテーブルには 3 つのレコードがあります)。このテーブルには、フィールド sid、pid、uid、statusType があります。

新しいクエリ:

    SELECT  p.pid
    , p.title
    , p.description
    , p.price
    , p.datecreated AS pdate
    , p.image1
    , c.cid
    , c.comment
    , c.datecreated AS cdate
    , pa.fname AS PFName
    , pa.lname AS PLName
    , ca.fname AS CFName
    , ca.lname AS CLName
    , ps.statusType
FROM tblPosts p
LEFT JOIN tblUsers pa ON pa.uid = p.uid
LEFT JOIN tblComments c ON p.pid = c.pid
LEFT JOIN tblUsers ca ON ca.uid = c.uid
LEFT JOIN tblPostStatus ps ON p.pid = ps.pid
ORDER BY p.pid

クエリ結果の写真を参照してください: オリジナル

新しい

これらの結果は適切に見えますか、それとも私のやり方が間違っていますか?

4

1 に答える 1

2

(チャットからの要約)

全体的な要件が少し変更されました。最終的に「ステータス」は投稿、ユーザーコメント レコードに関連するため、ステータスはコメント テーブルに移動されました。追加の要件が追加されました: 「クレーム」コメントを含む投稿を識別します。

SQL フィドル

SELECT  p.pid
    , p.title
    , c.cid
    , c.comment
    , c.statusType 
    , COALESCE(cnt.HasClaim, 0) AS HasClaim
    , pa.fname AS PFName
    , pa.lname AS PLName
    , ca.fname AS CFName
    , ca.lname AS CLName
FROM tblPosts p
      LEFT JOIN tblUsers pa ON pa.uid = p.uid
      LEFT JOIN tblComments c ON p.pid = c.pid
      LEFT JOIN tblUsers ca ON ca.uid = c.uid
      LEFT JOIN (
          SELECT pid, COUNT(*) AS HasClaim
          FROM  tblComments 
          WHERE statusType = 1
          GROUP BY pid
        ) cnt ON cnt.pid = p.pid
ORDER BY p.pid, c.cid
于 2013-08-25T17:45:08.587 に答える