1

私はSQLの教科書を読んでいます。また、私は CMS 駆動の PHP/SQL Web サイトを持っています。「探索」するときに正しいクエリ結果がどうあるべきかを理解しているので、データベースのコピーをダウンロードしました。

私の Web サイトには「アラート」機能があり、アラートにサインアップすると、新しいコンテンツが追加されるたびに電子メール通知を受け取ることができます。

具体的には、 alertと *alert_sent*の 2 つのテーブルがあります。Alertには個人の電子メール アドレスが含まれ、*alert_sent* には個人に送信された各電子メールの詳細が含まれます。したがって、アラート テーブルに 100 人がサインアップした場合、テーブルには 100 レコードが含まれます。簡単にするために、10 件の新しい記事があった場合、合計 1,000 件の警告メールが送信されました (各受信者に 10 件)。

CMS Web サイトのバックエンドにログインすると、ユーザーが受信したアラート メールの数を確認できます。私はこれを再現してみたいと思っています。

関連するすべてのレコードを取得するために、次のクエリを実行しました。

SELECT alert.alert_recipient,alert_sent.id
FROM alert
INNER JOIN alert_sent
ON alert_sent.alert_id=alert.id;

これで、このクエリをクエリして、最も多くの電子メール アラートを受信した人を表示したいと思います。このようなもの:

SELECT COUNT(DISTINCT, alert_recipient, ID) FROM myqueryabove
GROUP BY alert_recipient
ORDER id DESC
LIMIT 10;

名前を付けてクエリを実行するだけでクエリを保存するMS Accessの経験があります。

私はここでそれを試しました:

SELECT alert.alert_recipient,alert_sent.id
    -> FROM alert
    -> INNER JOIN alert_sent
    -> ON alert_sent.alert_id=alert.id
    -> AS query_001;

でもそれが返ってきた

エラー 1064 (42000): SQL 構文にエラーがあります

最も多くの電子メール アラートを受信した 10 個の電子メール アドレス (alert_recipient) のリストを返すようにするには、どのようにクエリを実行すればよいでしょうか?

__UPDATE FOLLOWING FOLLOWING SOME ANSWERS _ _ 最後の文で指定された望ましい結果を生成することに加えて、私の目標は、既存のクエリをクエリする方法を理解することです。すべてを同じクエリに入れようとするのではなく、後でテーブルであるかのようにクエリできる、一口サイズのコード スニペットのアイデアが気に入っています。これは、Access で学習した成果です。SQL へのアプローチが間違っている可能性がありますか? この場合、このアプローチは可能ですか?

4

2 に答える 2

1

おそらく、次のようなことを試すことができます(SQL SERVER 2008で機能します):

select top 10 alert.alert_recipient, count(alert.alert_recipient) as alert_sent_count 
from alert,  alert_sent
where alert.id = alert_sent.alert_id
group by alert.alert_recipient
order by alert_sent_count desc

しかし、MySqlの場合、次のように推測するしかありません:

select alert.alert_recipient, count(alert.alert_recipient) as alert_sent_count 
from alert,  alert_sent
where alert.id = alert_sent.alert_id
group by alert.alert_recipient
order by alert_sent_count desc
limit 10
于 2013-07-04T16:24:08.810 に答える
1

このようなことを試してください(そして投票することを忘れないでください;))

    a.alert_recipient を選択
    アラートから
    加入
    (
        トップ10を選択
        alert_id、
        カウント (個別のアラート ID)
        alert_sent から
        alert_id でグループ化
        カウント順 (個別の alert_id)
    )t
    a.id = t.alert_id で
于 2013-07-04T16:15:24.170 に答える