Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Два запроса в одном


Автор: Mason13 27.3.2010, 20:10
Дана база пользователей (users) : userid, name, email
Дана база их обьявлений (listings) : id, author (в этом поле содержиться userid автора), text, glamur, redcent, refresh
Последние 3 поля (т.е. glamur, redcent, refresh) содержат либо 1, либо 0.

Пытаюсь сделать статистику пользователей.
Для этого делаю запрос mysq_query("SELECT * FROM users LIMIT 100"), т.е. вывожу к примеру первые 100 пользователей.
Как можно усложнить запрос так, что бы он для каждого пользователя смотрел ВСЕ их обьявления в базе listings, и, если находит хотя бы одно обьявление с полем glamur, равным 1, то к данной строчке в результате запроса прибавляется это поле с его результатом, то же самое мне нужно и для redcent и для refresh.

Т.е. я хотел бы, что бы было так:

$q = mysql_query('тут некий волшебный запрос, который мне нужен');
while($r=mysql_fetch_assoc){
массив $r как минимум будет содержать:
$r['userid'] == id пользователя
$r['glamur'] == 1, если хоть одно его обьявление содержит поле glamur с 1, иначе 0
$r['redcent'] и $r['refresh'] == аналогично как для glamur.
}

Как сделать так???

Автор: Akina 27.3.2010, 20:49
Цитата(Mason13 @  27.3.2010,  21:10 Найти цитируемый пост)
$r['glamur'] == 1, если хоть одно его обьявление содержит поле glamur с 1, иначе 0

Если тебя устроит вариант "$r['glamur'] > 0, если хоть одно его обьявление содержит поле glamur с 1, иначе 0", то
Код

SELECT users.userid
     , users.name
     , users.email
     , Sum(listings.glamur) as glamur
     , Sum(listings.redcent) as redcent
     , Sum(listings.refresh) as refresh
FROM users 
JOIN listings
  ON users.userid = listings.author 
LIMIT 100


Автор: Mason13 27.3.2010, 21:31
спс, только mysql выдавал ошибку, что то о GROUP BY.
вставил в запрос GROUP BY - заработало

Автор: Akina 27.3.2010, 23:00
Ну есссно - есть sum, нужен и group by... сам додумал - хорошо.

Автор: Mason13 28.3.2010, 19:34
Цитата(Akina @ 27.3.2010,  23:00)
Ну есссно - есть sum, нужен и group by...

Ах, да, точно, я и забыл.. как я мог забыть такую мелочь, вот болван, а... всё ведь так естественно: если есть сумма, то должна быть и группа! Если есть резистор на 10Ом, то должен быть и конденсатор на 20мФ и никак не иначе, всё естественно, и как просто!)

Цитата(Akina @ 27.3.2010,  23:00)
сам додумал - хорошо.

Неет, прочитал ваши мысли. Прям так и видел перед собой текст "этот человек что-то не договаривает. А не договаривает он вот что: GROUP BY"...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)