Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Mysql Выбор записей + к каждой count из другой таблицы (http://forum.oszone.net/showthread.php?t=66209)

benya 25-05-2006 16:41 442344

Mysql Выбор записей + к каждой count из другой таблицы
 
Господа, помогите построить запрос!

Есть таблица с фотографиями:
jpg

PHP код:

id,jpg,opis 

Есть вторая таблица с комментами пользователей:
jpg_comm

PHP код:

id,id_jpg,comment 


Для того, что бы пришивать к фото комментарии пользователей, добавляется комментарий и в ячейку id_jpg кладется номер id таблицы jpg, тоесть на id какой фотографии ссылаемся.
Нужно.
Выбрать фотографии + подсчитать количество коментариев к фото. (естественно в одном запросе)

Я делаю так:

PHP код:

SELECT jpg.id,jpg,opis,count(*) AS count FROM `jpg`,`jpg_commWHERE jpg_comm.id_jpg jpg.id GROUP BY jpg.jpg 

Но в этом случае выбираются только фотографии у которых есть комментарий (есть записи ссылающиеся с таблицы jpg_comm)
Записи на которые не ссылок нет - не выбираются ;(
Как же построить запрос что бы выбирались все записи + если у фото нет комментария в поле count проставить 0,либо пкстое либо NULL?

Vlad Drakula 25-05-2006 17:04 442349

benya
знаю как это сделать в оракл(даже несколькими способами)

рекомендации по воплащению в MySQL:
просто завести еще одно поле в таблице jpg в котом будет хранится колличество коментариев... работать будет на порядок быстрее!

benya 25-05-2006 17:15 442354

Vlad Drakula,
1)Ну, кидай, может идею споймаю.
2)Вобщем-то да, интересная идея. Только как ячейки обновлять?? Раз за какое-то время?

mar 25-05-2006 17:32 442361

benya
Цитата:

Только как ячейки обновлять?? Раз за какое-то время?
обновлять при занесения комментария, естественно. (В нормальных СУБД этим занимался бы триггер - при занесения комментария в таблицу комментариев, обновлял бы поле счетчика, а так придется доп. зпросом, но все равно лучше избыточное поле, - работать select будет быстрее )

benya 25-05-2006 20:29 442399

mar,
У меня еще должны кроме этих быть данные о среднем рейтинге фотографии.
Похоже так оно и прийдется сделать. Делать count для каждой фотки (комменты + рейтинг) тяжеловато будет.

Кстати, никто не подскажет оптимальную структуру для хранения голосов.
Предполагается оценивание фото по 5 бальной шкале. Пользователю, который проголосовал, какое-то время голосовать запрещено.
Писать их строками или опять таблицу добавить в jpg с типом text и записывать туда что-то типа 5&4&2&1&4&2&2 ... а потом считать среднее... Ну тоесть с разделителями.

mar 25-05-2006 20:38 442400

можно сделать табличку для голосования, что-то типа:
img_id int(11) not null,
user_id int(11) not null,
score int(11) not null,
+ если нужно, время голосования и что-там еще Вам может понадобится?
(это для записи результатов и проверки, голосовал ли человек, или когда он голосовал и показа результатов, если это не анонимно)
и, по аналогии с предыдущим вариантом, вводим избыточность, т.е. при занесении голоса, меняем данные соответствующего поле (расчета среднего) в jpg. Тогда все про рисунок узнаете очень быстро.

benya 25-05-2006 21:32 442425

mar,
А если user то нету. Голосование анонимное. Я думаю, како-то может быть отголосовавшего запретить по ip на несколько часов?

mar 25-05-2006 21:55 442433

benya
тогда session_id (например). ip - тоже можно, но надо учитывать, что целые районы, или небольшие городки могут светиться под одним ip, поскольку сидят, скажем, за одним proxy

benya 25-05-2006 22:14 442442

mar,
Кстати, написал апдейт для таблицы с голосами:
Код:

UPDATE `jpg` SET avg_vote = (SELECT AVG(vote) from jpg_vote GROUP BY id_jpg) WHERE id=1
Правда пока не учитывает не даты не ip (или session_id). Не додумался.

vadimiron 26-05-2006 03:15 442507

benya
Мщжно также без новых столбцов с помощью UNION ппробывать сделать
Просто объеденить запрос фоток с комментарями с запросом фоток вообще без комментариев (и вместо count(*) поставить просто 0)

Vlad Drakula 26-05-2006 10:44 442586

benya
Цитата:

Ну, кидай, может идею споймаю.
кинуть то я могу, но смысле никакого... все навно MySQL версии 4.* этого не поддерживает...

vadimiron
Цитата:

Мщжно также без новых столбцов с помощью UNION ппробывать сделать
Просто объеденить запрос фоток с комментарями с запросом фоток вообще без комментариев (и вместо count(*) поставить просто 0)
интересная идея... но все равно зранить дополнительное поле это более экономичное решение...

vadimiron 26-05-2006 18:27 442779

Цитата:

интересная идея... но все равно зранить дополнительное поле это более экономичное решение...
Не спорю: приходится всегда выбирать либо чуть больше данных хранить, либо больше процессорного времени занимать


Время: 22:57.

Время: 22:57.
© OSzone.net 2001-