# Is it possible to see who voted in polls?

**URL:** https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064
**Category:** Support
**Created:** [01.Апрель.2015 14:49:38 UTC](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064 "2015-04-01T14:49:38Z")
**Posts on this page:** 17
**Page:** 1

<div class="post-metadata">

### Author: ![tobiaseigen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tobiaseigen/32/539204_2.png) [@tobiaseigen](https://meta.discourse.org/u/tobiaseigen)
#### Post date: [01.Апрель.2015 14:49:38 UTC](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064/1 "2015-04-01T14:49:38Z")

</div>

I just tested out polls for the first time in a while, and it works quite well and I like it.

But I would like to have an open poll so we can see who voted for which option. Is this possible? Is there any way to see who voted for what?

---

<div class="post-metadata">

### Author: ![gerhard](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gerhard/32/119479_2.png) [@gerhard](https://meta.discourse.org/u/gerhard)
#### Post date: [27.Октябрь.2015 23:06:31 UTC](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064/12 "2015-10-27T23:06:31Z")

</div>

You can run the following query to get a list of users who voted and their selected poll options.  
Please choose the appropriate query for your Discourse version.

### Query for Discourse v2.2.0.beta5 and newer

```sql
-- [params]
-- post_id :post_id
-- text :poll_name = poll

SELECT u.id AS user_id, u.username, v.poll_option_id AS option_id, o.html AS option_html
FROM polls p
       JOIN poll_votes v ON (p.id = v.poll_id)
       JOIN poll_options o ON (o.id = v.poll_option_id)
       JOIN users u ON (v.user_id = u.id)
WHERE p.post_id = :post_id AND p.name = :poll_name
ORDER BY u.username, v.poll_option_id

```

### Query for older versions of Discourse up to v2.2.0.beta4

```sql
-- [params]
-- post_id :post_id
-- text :poll_name = poll

SELECT votes.user_id, users.username, votes.option_id, options.html AS option_html
FROM (
  SELECT value1 ->> 'id' AS id,
    value1 ->> 'html' AS html
  FROM (
    SELECT json_array_elements(value :: JSON -> :poll_name -> 'options') AS value1
    FROM post_custom_fields
    WHERE post_id = :post_id AND name = 'polls' AND value :: JSON -> :poll_name ->> 'name' = :poll_name
  ) option_values
) options
       JOIN (
  SELECT key :: INTEGER AS user_id,
    trim(json_array_elements(value :: JSON -> :poll_name) :: TEXT, '"') AS option_id
  FROM json_each((
    SELECT value :: JSON
    FROM post_custom_fields
    WHERE post_id = :post_id AND name LIKE 'polls-votes'
  ))
) votes ON (options.id = votes.option_id)
       JOIN users ON (votes.user_id = users.id)
ORDER BY users.username, votes.option_id

```

### How to find post\_id

You can use the following query if you need to find the right `post_id`.

```sql
-- [params]
-- topic_id :topic_id
-- int :post_number = 1

SELECT id
FROM posts
WHERE topic_id = :topic_id AND post_number = :post_number

```

---

<div class="post-metadata">

### Author: ![tobiaseigen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tobiaseigen/32/539204_2.png) [@tobiaseigen](https://meta.discourse.org/u/tobiaseigen)
#### Post date: [28.Октябрь.2015 00:20:36 UTC](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064/13 "2015-10-28T00:20:36Z")

</div>

it works! thanks so much. 🎆

is there a query for quickly identifying the post ID containing polls? I used the .json URL method but it was surprisingly cumbersome to find the right post within it.

---

<div class="post-metadata">

### Author: ![riking](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/riking/32/170938_2.png) [@riking](https://meta.discourse.org/u/riking)
#### Post date: [28.Октябрь.2015 00:39:20 UTC](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064/14 "2015-10-28T00:39:20Z")

</div>

> [@gerhard](#):
>
> I added a second parameter for the poll name which usually is poll (@riking default values for params would be a nice feature 😉)

Default values are specified like this:

> [@gerhard](#):
>
> – text :poll\_name = poll

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [05.Январь.2019 10:42:09 UTC](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064/18 "2019-01-05T10:42:09Z")

</div>



---

<div class="post-metadata">

### Author: ![gerhard](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gerhard/32/119479_2.png) [@gerhard](https://meta.discourse.org/u/gerhard)
#### Post date: [09.Январь.2019 15:52:21 UTC](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064/21 "2019-01-09T15:52:21Z")

</div>

I updated the query. It’s now a lot simpler. 🙂

---

<div class="post-metadata">

### Author: ![Mine\_Zcash](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mine_zcash/32/110575_2.png) [@Mine\_Zcash](https://meta.discourse.org/u/Mine_Zcash)
#### Post date: [24.Сентябрь.2019 10:34:44 UTC](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064/22 "2019-09-24T10:34:44Z")

</div>

Можно ли отфильтровать результаты по возрасту аккаунта?

Например, если аккаунту меньше 60 дней, он не отображается в результатах? Или, возможно, есть способ создать опрос, который ограничивает голосование в зависимости от возраста аккаунта?

Мы пытаемся предотвратить возможную накрутку голосов с помощью недавно созданных аккаунтов перед важным голосованием.

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [24.Сентябрь.2019 11:12:32 UTC](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064/23 "2019-09-24T11:12:32Z")

</div>

Это очень интересный случай использования. Я считаю, что нам стоит добавить возможность запрещать пользователям уровня TL0 голосовать в опросах, @zogstrip!

---

<div class="post-metadata">

### Author: ![Mine\_Zcash](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mine_zcash/32/110575_2.png) [@Mine\_Zcash](https://meta.discourse.org/u/Mine_Zcash)
#### Post date: [24.Сентябрь.2019 13:43:16 UTC](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064/25 "2019-09-24T13:43:16Z")

</div>

Есть ли параметр, который можно добавить к строке поиска от @gerhard, чтобы в запросе не отображались пользователи с уровнем доверия или возрастом аккаунта ниже определённого?

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

---

<div class="post-metadata">

### Author: ![gerhard](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gerhard/32/119479_2.png) [@gerhard](https://meta.discourse.org/u/gerhard)
#### Post date: [24.Сентябрь.2019 18:12:45 UTC](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064/26 "2019-09-24T18:12:45Z")

</div>

Вот запрос для установки минимального уровня доверия пользователей.

```sql
-- [params]
-- post_id :post_id
-- text :poll_name = poll
-- integer :min_trust_level

SELECT u.id AS user_id, u.username, v.poll_option_id AS option_id, o.html AS option_html
FROM polls p
       JOIN poll_votes v ON (p.id = v.poll_id)
       JOIN poll_options o ON (o.id = v.poll_option_id)
       JOIN users u ON (v.user_id = u.id)
WHERE p.post_id = :post_id AND p.name = :poll_name
  AND u.trust_level >= :min_trust_level
ORDER BY u.username, v.poll_option_id

```

А вот запрос для отображения только тех пользователей, которые зарегистрировались определённое количество дней назад.

```sql
-- [params]
-- post_id :post_id
-- text :poll_name = poll
-- integer :days_ago = 30

SELECT u.id AS user_id, u.username, v.poll_option_id AS option_id, o.html AS option_html
FROM polls p
       JOIN poll_votes v ON (p.id = v.poll_id)
       JOIN poll_options o ON (o.id = v.poll_option_id)
       JOIN users u ON (v.user_id = u.id)
WHERE p.post_id = :post_id AND p.name = :poll_name
  AND u.created_at < NOW() - INTERVAL ':days_ago days' 
ORDER BY u.username, v.poll_option_id

```

---

<div class="post-metadata">

### Author: ![Mine\_Zcash](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mine_zcash/32/110575_2.png) [@Mine\_Zcash](https://meta.discourse.org/u/Mine_Zcash)
#### Post date: [24.Сентябрь.2019 18:43:52 UTC](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064/27 "2019-09-24T18:43:52Z")

</div>

Супер 😍 @gerhard, спасибо!

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [26.Ноябрь.2019 18:10:07 UTC](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064/28 "2019-11-26T18:10:07Z")

</div>

Обратите внимание, что этот запрос теперь включен в стандартные запросы [Data Explorer](https://meta.discourse.org/t/32566?silent=true), которые устанавливаются автоматически, поэтому вам не нужно вводить этот код самостоятельно!

> [@gerhard](#):
>
> ### Как найти post\_id

Другой способ найти ID поста, особенно если это первый пост, — посмотреть файл \<topic\_url\>.json (например, [Is it possible to see who voted in polls?](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064.json)). В начале этого JSON-файла ID поста найти довольно легко.

---

<div class="post-metadata">

### Author: ![zogstrip](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/zogstrip/32/512781_2.png) [@zogstrip](https://meta.discourse.org/u/zogstrip)
#### Post date: [04.Декабрь.2019 20:03:40 UTC](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064/29 "2019-12-04T20:03:40Z")

</div>

@nbianca Можешь добавить в свой список новый параметр опроса `min_trust_level`, который позволит создателям опросов ограничивать возможность голосования в зависимости от уровня доверия пользователей?

Эта опция должна быть доступна в интерфейсе конструктора опросов, а также должно быть отображено понятное сообщение, объясняющее, почему некоторые пользователи не могут голосовать в данном опросе.

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [04.Декабрь.2019 20:39:15 UTC](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064/30 "2019-12-04T20:39:15Z")

</div>

> [@pfaffman](#):
>
> Другой способ найти ID поста

Вам даже не нужно искать post\_id, так как теперь для сотрудников доступна кнопка экспорта в опросах.

---

<div class="post-metadata">

### Author: ![nbianca](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nbianca/32/157984_2.png) [@nbianca](https://meta.discourse.org/u/nbianca)
#### Post date: [28.Январь.2020 12:48:34 UTC](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064/31 "2020-01-28T12:48:34Z")

</div>

> [@zogstrip](#):
>
> @nbianca, не могли бы вы добавить в свой список новый параметр опроса `min_trust_level`, который позволит создателям опросов ограничивать голосование в зависимости от уровня доверия участников?

Это уже реализовано, но немного иначе, чем было запрошено. Опросы принимают параметр `groups`, а не `min_trust_level`. Параметр `groups` принимает список названий групп, разделённых запятыми (например, `trust_level_2,staff`, чтобы разрешить голосование пользователям с уровнем доверия 2 и выше, а также всем сотрудникам).

> <https://github.com/discourse/discourse/commit/07222af7ab8fe5b6637256f3a5a86382ab2d5564>
>
> This options can be used to restrict polls to certain groups.

---

<div class="post-metadata">

### Author: ![HappyFeet\_987](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/happyfeet_987/32/137587_2.png) [@HappyFeet\_987](https://meta.discourse.org/u/HappyFeet_987)
#### Post date: [09.Апрель.2020 18:20:16 UTC](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064/32 "2020-04-09T18:20:16Z")

</div>

Извините, но для меня это слишком запутанно. Не могли бы вы разобрать это по шагам?

---

<div class="post-metadata">

### Author: ![tobiaseigen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tobiaseigen/32/539204_2.png) [@tobiaseigen](https://meta.discourse.org/u/tobiaseigen)
#### Post date: [07.Май.2021 13:23:02 UTC](https://meta.discourse.org/t/is-it-possible-to-see-who-voted-in-polls/27064/33 "2021-05-07T13:23:02Z")

</div>

Эта тема была автоматически закрыта через 30 дней после последнего ответа. Новые ответы больше не принимаются.
