Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Помоч составить sql запрос.
Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013 Откуда: Санкт-Петербург
Помог: 6 раз(а)
Не часто я обращаюсь за помощью, стараюсь все таки гуглить. Но сейчас какой то ступор.
Задача составить sql запрос (возможно ли одним?). Схему таблиц рисовать не буду пока, но если в процессе обсуждения потребуется, нарисую. Пока попробую на словах.
Имеем конкретный id пользователя.
Есть таблица с материалами (например новости) пользователей. Т.е. каждый материал принадлежит какому то конкретному пользователю (есть поле с id пользователем, но с таблицей пользователей она не связана, на запрос это не должно влиять вроде). У пользователя может быть много материалов. С таблицей материалов(новостей) связана (один ко многим) таблица голосов. Т.е. один материал(новость) может иметь много голосов. Структура голосов упростим, id кто проголосовал и поле голос единичка (1) Вот их и просуммировать надо.
Задача составить запрос получения суммы ВСЕХ голосов ВСЕХ материалов данного пользователя.....)
ЗЫ: после будет еще один вопрос по структуре таблицы голосов.
----- Умные мысли приходят тогда, когда все глупости уже сделаны...
DeepVarvar
Отправлено: 20 Августа, 2015 - 23:19:26
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Не втуплю в одном только (от этого зависит решение) -- это сумма голосов к одному конкретному пользаку (напр. в его профиле) или надо составить типа рейтинг всех пользаков по сумме голосов?
Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013 Откуда: Санкт-Петербург
Помог: 6 раз(а)
DeepVarvar пишет:
Не втуплю в одном только (от этого зависит решение) -- это сумма голосов к одному конкретному пользаку (напр. в его профиле) или надо составить типа рейтинг всех пользаков по сумме голосов?
Первое. В начале я указал один конкретный пользователь. У него много новостей, за эти новости другие пользователи давали голос (1). Надо посчититать сумму голосов всех всех материалов этого конкретного пользователя.
Пользователь Вася (id=30) имеет 2 новости (в таблице новостей для этих новостей указан id=1 принадлежащий пользователю).
Таблица новости
Трабла тут в том, что пользак может быть удален, или у статьи может не быть ни одного голоса.
Но, если заменять на CROSS/INNER/RIGHT JOIN'ы то мы снова можем напороться на нецелостность данных и результат не будет на 100% корректным.
Ну и для одного пользака запрос будет не таким (в угоду производительности).
Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013 Откуда: Санкт-Петербург
Помог: 6 раз(а)
DeepVarvar
DeepVarvar пишет:
Трабла тут в том, что пользак может быть удален, или у статьи может не быть ни одного голоса.
Мне в принципе надо для одного конкретного пользователя провести выборку. Если выполняется этот запрос, значит пользователь существует, т.е. это в ЛК этого пользователя будет.
----- Умные мысли приходят тогда, когда все глупости уже сделаны...
DeepVarvar
Отправлено: 21 Августа, 2015 - 00:13:16
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011 Откуда: Пружаны Бресткая обл. Беларусь
Помог: 2 раз(а)
быть может изменить структуру и считать сумму голосов к материалу при добавлении гоолоса (триггер в бд например), а потом выводить уже итог. ведь лучше один раз посчитать, чем каждый раз запрашивать, тем более что при большом количестве голосов это будет накладно.
пс конечно если не требуется знать кто именно из пользователей голосовал.
Flash_PR
Отправлено: 22 Августа, 2015 - 01:49:45
Посетитель
Покинул форум
Сообщений всего: 328
Дата рег-ции: Окт. 2013 Откуда: Санкт-Петербург
Помог: 6 раз(а)
broshurkaplus пишет:
быть может изменить структуру и считать сумму голосов к материалу при добавлении гоолоса (триггер в бд например), а потом выводить уже итог. ведь лучше один раз посчитать, чем каждый раз запрашивать, тем более что при большом количестве голосов это будет накладно.
Да, вы правы, так и делаю, добавил поле которое при голосе плюсуется.
broshurkaplus пишет:
пс конечно если не требуется знать кто именно из пользователей голосовал.
Увы, заказчик хочет знать кто голосовал, поэтому писать данные по голосу все равно придется. Но это пригодится. Просто я упрощенную задачу описал, на самом деле в моей разработке за материал могут давать как "+", так и "-" Соответсвенно эти данные буду тоже выводить, количество голосов "за" и количество голосов "против" А рейтинг получается как разница голосов.
----- Умные мысли приходят тогда, когда все глупости уже сделаны...
broshurkaplus
Отправлено: 22 Августа, 2015 - 23:39:59
Посетитель
Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011 Откуда: Пружаны Бресткая обл. Беларусь
Помог: 2 раз(а)
1 только если уж никак без знания того кто голосовал. реально заказчика надо переубедить или найти компромис.
2 +/- так считайте и количество всего проголосовавших и в базу, а "-" получаете: проголосовавших-рейтинг=сумма отрицательных голосов.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.