2013-07-04 1 views
1

Я работаю над текстовым блоком SQL. Кроме того, у меня есть веб-сайт PHP/SQL, основанный на CMS. Я загрузил копию своего db, поскольку у меня есть понимание того, какие правильные результаты запроса должны быть, когда «исследуете».NEWB Мой первый запрос на SQL-запрос

На моем сайте есть функция «оповещений», в которой человек может регистрироваться на оповещения, а затем получать уведомления по электронной почте каждый раз, когда добавляется новый контент.

В частности, имеются две таблицы: alert и * alert_sent *. Alert содержит адрес электронной почты физических лиц и * alert_sent * содержит подробную информацию о каждом электронном письме, отправленном человеку. Итак, если я скажу, что в моей таблице оповещений зарегистрировано 100 человек, таблица содержит 100 записей. Если для простоты было десять новых статей, было отправлено в общей сложности 1000 сообщений электронной почты - от 10 до каждого получателя.

Когда я выхожу на задний план своего веб-сайта CMS, я могу видеть количество предупреждающих сообщений, полученных человеком. Я хотел бы попытаться воссоздать это, и, думаю, я почти там.

Чтобы получить все соответствующие записи я выполнил этот запрос:

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; 

Но что вернулся

ERROR 1064 (42000): У вас ошибка в вашем синтаксисе SQL

Как я запрашиваю мой запрос, чтобы вернуть список из десяти адресов электронной почты (alert_recipient), которые получили большинство уведомлений по электронной почте?

__ UPDATE и последовавший ОТВЕТЫ_ _ В дополнение к производству желаемых результатов, как указано в последнем предложении, моя цель состоит в том, чтобы понять, как запросить существующий запрос. Мне нравится идея фрагментов кода укуса кода, которые позже могут быть запрошены, как если бы они были таблицами, а не пытались поместить все в один и тот же запрос. Это продукт моего обучения в Access. Может быть, я неправильно подхожу к SQL? Возможно ли, что этот подход возможен в этом случае?

ответ

1

Попробуйте что-то вроде этого (и не забывайте голосовать;))

 
    select a.alert_recipient 
    from alert 
    join 
    (
     select top 10 
     alert_id, 
     count(distinct alert_id) 
     from alert_sent 
     group by alert_id 
     order by count(distinct alert_id) 
    )t 
    on a.id = t.alert_id 
+0

Привет, спасибо, что нашли время ответить, но это вызвало ошибку «ERROR 106 4 (42000): У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования около '10 alert_id, count (distinct alert_id) from alert_sent " Но, даже если это действительно работало, моя цель состояла в том, чтобы понять, как запросить существующий запрос. начал изучать БД с помощью Access, и это может быть источником того, как мое понимание работает. Обновление исходного Q ... –

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 
+0

Спасибо за ввод, но созданный «ERROR 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования около '10 alert.alert_recipient, count (alert.alert_recipient) в качестве alert_sent_count " –

+0

Можете ли вы попробовать это: ===== выберите alert.alert_recipient, COUNT (alert.alert_recipient), как alert_sent_count от тревоги, alert_sent где alert.id = alert_sent.alert_id группы по alert.alert_recipient порядка alert_sent_count убыв предел 10 ====== – jguo1

+0

Это сработало! Спасибо, то данные также выглядят как ожидаемые. Однако я обновил свой вопрос. Я должен был бы более подробно изложить это. Если у вас есть шанс, см. новый нижний абзац моего Q –

 Смежные вопросы

  • Нет связанных вопросов^_^