Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   sql обединение (https://javascript.ru/forum/server/9637-sql-obedinenie.html)

cuberboy 28.05.2010 22:25

sql обединение
 
есть таблица предммета голосования с айди
таблица голосов с привязкой к айди предмета голосования.Нужно достать голоса за последние сутки и за месяц. обе таблицы достать по отдельности получается. а вот одним запросом нет.куда капать?
одним запросом пробывал достовать через юнион .....

Gvozd 28.05.2010 22:27

телепаты в отпуске

cuberboy 28.05.2010 22:59

когда вернться ? 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()


всё работает всё замечателено но хочется одним запросом

cuberboy 29.05.2010 08:49

то есть вывод
таб1(номер, голоса всего1)
таб2(номер, голоса всего2)
надо соединить по номеру и получить
таб(номер, голоса всего1, голоса всего2)

e1f 30.05.2010 03:58

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()

cuberboy 30.05.2010 11:30

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 (((

e1f 30.05.2010 13:22

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()

DooMer 31.05.2010 12:15

А чем 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()

e1f 31.05.2010 14:14

Цитата:

Сообщение от cuberboy (Сообщение 56938)
надо соединить по номеру и получить
таб(номер, голоса всего1, голоса всего2)

DooMer, и как это сделать с помощью UNION?

DooMer 31.05.2010 15:57

ой, чуть не заметил ) виноват


Часовой пояс GMT +3, время: 04:10.