2012-02-26 9 views
0

私はすでに開発したシステムに対処しなければなりません。ユーザはmysqlテーブルのユーザに設定されています。 users_preferencesという2番目のテーブルがあります。そのテーブルにはユーザーのプライバシー設定が格納されます。それはすべてのユーザーのためのレコードを持つ必要はありません以外はすべてokです。レコードがない場合は、ユーザーが一般公開されていると仮定する必要があります。これは問題です - 私はusers_preferencesテーブルに基づいて、usersテーブルで検索しようとしています。私はこれまで持っていることは次のとおりです。2つのテーブルのMySQL if文

SELECT users.id AS id, users.username AS username, users.avatar AS avatar, IF(users_preferences.privacyControls is null OR users_preferences.privacy = 0), 0, 1) AS userPrivacy 
FROM users, users_preferences 
WHERE users_preferences.userid = users.id AND userPrivacy = 0 AND users.username LIKE '%demo_user%' 

クエリーが有効でないと、エラーがスローされますが、それは私が何をしたいのか、あなたに基本的な考えを与えること - 私はusers_preferences.privacyを設定したユーザーを選択します= 0(またはそのようなレコードはありません)。 ありがとうございます。

+0

あなたはそれはあなたが – Sparky

答えて

0
SELECT 
    users.id AS id, 
    users.username AS username, 
    users.avatar AS avatar, 
    IFNULL(users_preferences.privacyControls, 0) AS userPrivacy 
FROM 
    users 
    LEFT JOIN users_preferences ON users_preferences.userid = users.id 
WHERE 
    IFNULL(users_preferences.privacyControls, 0) = 0 
    AND users.username LIKE '%demo_user%' 
+0

#1054やりたいようになる、左が参加する検索する - に不明な列「userPrivacyを」「節はどこ」これはことを示しているが、私はすべてのWHERE句を削除すると、それが成功し、結果を示していますが、WHERE userPrivacy = 0に設定すると死ぬでしょう。助言がありますか?前もって感謝します。 – some12die4

+0

私の悪い、私の答えを編集! –

+0

は魅力的に機能します。ありがとう。 – some12die4

0

これを試してみてください。

SELECT a.ID, a.username, a.avatar 
FROM Users a LEFT JOIN Users_Preferences b ON 
     a.ID = b.userID 
WHERE (b.userPrivacy = 0 OR b.userID IS NULL) AND 
     a.Username LIKE '%demo_user%' 

あなたが0にuserPrivacyをフィルタリングしているので、あなたは今、すでに上記の結果は、すべての公共のユーザーであることが理解されるuserPrivacyを省略することができます。それとも、このようにすることができますか?

SELECT a.ID, a.username, a.avatar, 'PUBLIC USER' as userPrivacy 
FROM Users a LEFT JOIN Users_Preferences b ON 
     a.ID = b.userID 
WHERE (b.userPrivacy = 0 OR b.userID IS NULL) AND 
     a.Username LIKE '%demo_user%' 
+0

返信いただきありがとうございます – some12die4

関連する問題