1

以下のようなお問い合わせがありました...

SELECT 
   contents.id, contents.title, contents.createdBy,
 (SELECT userGroup FROM suser_profile WHERE userId = 
         (SELECT users.id 
          FROM 
            users 
          WHERE 
            login = contents.createdBy)
    ) as userGroupID
FROM 
   contents 
WHERE
   contents.id > 0   
   AND contents.contentType = 'News' 
   **AND userGroupID = 3**
LIMIT 0, 10

WHERE 句内でuserGroupIDを割り当てようとすると、SQL は SQL Error(1054):Unknown column "userGroupID" in "where clause" というエラーを発生させます

それまでの間、以下のように少し変更すると、

SELECT 
   contents.id, contents.title, contents.createdBy
FROM 
   smart_cms_contents 
WHERE
   contents.id > 0   
   AND contents.contentType = 'News' 
   **AND (SELECT userGroup FROM user_profile WHERE userId = 
         (SELECT users.id 
          FROM 
            users 
          WHERE 
            users.login = contents.createdBy)
    ) = 3**
LIMIT 0, 10

その後、クエリは正常に機能します。

複数のuserGroupIDチェックを使用して、2 番目のスタイルでクエリが大きくなるようにする必要があります。最初のスタイルのようなスタイルにする必要があります。

*注: テーブル名は、プロジェクトで使用している元の名前ではありません。テーブル名に誤りがある場合は無視してかまいません。私の主な関心事は、WHERE 句内でASによって変数に割り当てられた値を使用することです。

クエリの STARS を無視します*

4

3 に答える 3

2

使用してHAVINGください。例:

WHERE
    contents.id > 0   
  AND
    contents.contentType = 'News'
HAVING
    userGroupID = 3
LIMIT 0, 10
于 2010-07-19T07:39:46.983 に答える
1

最初のクエリを正しく理解していれば、あなたがしたいのは結合だと思います。

SELECT DISTINCT 
   contents.id, contents.title, contents.createdBy
FROM
   contents INNER JOIN users
      ON contents.createdBy = users.login
   INNER JOIN user_profile
      ON user_profile.userId = users.id
WHERE
   contents.id > 0   
   AND contents.contentType = 'News' 
   AND user_profile.userGroupID = 3
LIMIT 0, 10
于 2010-07-19T07:40:11.800 に答える
1

あなたが尋ねた質問に対する完全な答えではありませんが...

SELECT DISTINCT c.id, c.title, c.createdBy, s.userGroup AS userGroupID
FROM contents AS c
INNER JOIN users AS u
  ON c.createdBy = u.login
INNER JOIN suser_profile AS s
  ON s.userId = u.id
WHERE c.id > 0
  AND c.contentType = 'News'
  AND s.userGroup = 3
于 2010-07-19T07:40:47.880 に答える