28.05.2010, 22:25
|
|
Профессор
|
|
Регистрация: 20.07.2009
Сообщений: 202
|
|
sql обединение
есть таблица предммета голосования с айди
таблица голосов с привязкой к айди предмета голосования.Нужно достать голоса за последние сутки и за месяц. обе таблицы достать по отдельности получается. а вот одним запросом нет.куда капать?
одним запросом пробывал достовать через юнион .....
|
|
28.05.2010, 22:27
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
телепаты в отпуске
|
|
28.05.2010, 22:59
|
|
Профессор
|
|
Регистрация: 20.07.2009
Сообщений: 202
|
|
когда вернться ? XDDD
Код:
|
foto (id,user)
golos (id,foto_id,kol,time) |
kol - "цена" голоса 1,2,3,4....
голосовать можно каждые 8 часов.
Код:
|
select foto.id,count(kol) from foto
left join golos on foto.id=golosa.foto_id |
Код:
|
select foto.id,count(kol) from foto
left join golos on foto.id=golosa.foto_id and golos.time BETWEEN $t1 and now() |
всё работает всё замечателено но хочется одним запросом
|
|
29.05.2010, 08:49
|
|
Профессор
|
|
Регистрация: 20.07.2009
Сообщений: 202
|
|
то есть вывод
таб1(номер, голоса всего1)
таб2(номер, голоса всего2)
надо соединить по номеру и получить
таб(номер, голоса всего1, голоса всего2)
|
|
30.05.2010, 03:58
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
SELECT foto.id, COUNT(g1.kol), COUNT(g2.kol) FROM foto
LEFT JOIN golos AS g1 ON foto.id=g1.foto_id
LEFT JOIN golos AS g2 ON foto.id=g2.foto_id AND g2.time BETWEEN $t1 AND NOW()
|
|
30.05.2010, 11:30
|
|
Профессор
|
|
Регистрация: 20.07.2009
Сообщений: 202
|
|
count считает строки 8(((( а мне надо считать значения в этих строках .к тому же при нуле голосов, каунт будет считать нулл. 8(((
можно сделать
SELECT foto.id, sum(g1.kol), sum(g2.kol) FROM foto
LEFT JOIN golos AS g1 ON foto.id=g1.foto_id
LEFT JOIN golos AS g2 ON foto.id=g2.foto_id AND g2.time BETWEEN $t1 AND NOW()
но тут косяк при нуле голосов тоже 8 (((
Последний раз редактировалось cuberboy, 30.05.2010 в 11:35.
|
|
30.05.2010, 13:22
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
cuberboy, а погуглить слабо, чтоли? К тому же Вы сами count в примере написали, а телепаты, как уже говорилось, в отпуске.
SELECT foto.id, SUM(IFNULL(g1.kol,0)), SUM(IFNULL(g1.kol,0)) FROM foto
LEFT JOIN golos AS g1 ON foto.id=g1.foto_id
LEFT JOIN golos AS g2 ON foto.id=g2.foto_id AND g2.time BETWEEN $t1 AND NOW()
|
|
31.05.2010, 12:15
|
Ламер
|
|
Регистрация: 19.02.2010
Сообщений: 295
|
|
А чем UNION не устраивает ?
select foto.id,count(kol) from foto
left join golos on foto.id=golosa.foto_id
UNION
select foto.id,count(kol) from foto
left join golos on foto.id=golosa.foto_id and golos.time BETWEEN $t1 and now()
|
|
31.05.2010, 14:14
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
Сообщение от cuberboy
|
надо соединить по номеру и получить
таб(номер, голоса всего1, голоса всего2)
|
DooMer, и как это сделать с помощью UNION?
|
|
31.05.2010, 15:57
|
Ламер
|
|
Регистрация: 19.02.2010
Сообщений: 295
|
|
ой, чуть не заметил ) виноват
|
|
|
|