2

ユーザーのメール設定を調べる必要があります。

この表には、ユーザーが受信できる電子メールの種類がカテゴリ別に含まれています。

email_preferences_categories

+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name     | text             | YES  |     | NULL    |                |
| overview | text             | YES  |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+

この表には、さまざまなタイプを受け取るための設定が含まれています。プリファレンスを設定していない場合、このテーブルには行がありません。

email_preferences

+------------+---------------------------------+------+-----+---------+----------------+
| Field      | Type                            | Null | Key | Default | Extra          |
+------------+---------------------------------+------+-----+---------+----------------+
| id         | int(10) unsigned                | NO   | PRI | NULL    | auto_increment |
| user_id    | int(10) unsigned                | NO   |     | NULL    |                |
| name       | text                            | YES  |     | NULL    |                |
| frequency  | enum('Daily','Monthly','None')  | YES  |     | Daily   |                |
+------------+---------------------------------+------+-----+---------+----------------+

特定のユーザーの電子メール設定に対応する名前と頻度を返すMYSQLクエリを作成する必要があります。

SELECT name, frequency
FROM email_preferences
LEFT JOIN email_preferences_categories using (name)
WHERE user_id = 42

問題が発生している場所:ユーザーがプリファレンスを設定していない場合、このクエリは行を返しません。欠落している電子メールカテゴリのデフォルトの「毎日」を返すようにしたいと思います。

4

2 に答える 2

2

に変更LEFT JOINRIGHT JOINます。

...
FROM email_preferences
RIGHT JOIN email_preferences_categories
...

または、テーブルを入れ替えることもできます。

...
FROM email_preferences_categories
LEFT JOIN email_preferences
...

これらの2つのオプションはどちらも同じことを行います。email_preferences_categoriesに一致する行がない場合でも、からすべての行を取得するようにしてくださいemail_preferences

また、すでに気付いたように、参加条件を変更する必要があります。


欠落している電子メールカテゴリのデフォルトの「毎日」を返すようにしたいと思います。

あなたが使用することができますIFNULL

SELECT name, IFNULL(frequency, 'Daily') AS frequency
于 2012-10-29T15:09:07.317 に答える
1

このクエリにはWHERE句は必要ありません。より制限的なJOINが必要です。上記のMarkByersの回答と組み合わせた完全なクエリは次のとおりです。

SELECT email_preferences_categories.name, IFNULL(frequency, 'Daily') AS frequency
FROM email_preferences_categories
LEFT JOIN email_preferences
    ON email_preferences.name = email_preferences_categories.name
    AND user_id = 42; 
于 2012-10-29T16:02:05.160 に答える